C# mvc在控制器中分别用Get 和 post 模式调用天气url返回数据乱码
访问方式有GET和POST
以下网址是java方面的
http://www.cnblogs.com/hotlove/p/5435324.html
求ASP.NET的
自己找了点资源,写的还是有问题
1 /汉字用UTF-8转码 2 protected string UrlUtf_8(string url) 3 { 4 byte[] bs = Encoding.GetEncoding("UTF-8").GetBytes(url); 5 StringBuilder sb = new StringBuilder(); 6 for (int i = 0; i < bs.Length; i++) 7 { 8 if (bs[i] < 128) 9 sb.Append((char)bs[i]); 10 else 11 { 12 sb.Append("%" + bs[i++].ToString("x").PadLeft(2, '0')); 13 sb.Append("%" + bs[i].ToString("x").PadLeft(2, '0')); 14 } 15 } 16 return sb.ToString(); 17 } 18 //!!!!目前没有找到post的方法,目前也没有找到解决乱码的方法,求解决。 19 //get方法 这里url的模拟地址为http://wthrcdn.etouch.cn/weather_mini?city=北京 20 //如果大神们想把url中的参数city的值"北京"进行转码,请用UrlUtf_8(url)方法 21 public string GetFunction(string url) 22 { 23 string serviceAddress = url; 24 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 25 request.Method = "GET"; 26 request.ContentType = "text/html;charset=UTF-8"; 27 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 28 Stream myResponseStream = response.GetResponseStream(); 29 //Encoding.GetEncoding("UTF-8")转码 30 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("UTF-8")); 31 //retString取到的值是乱码 32 string retString = myStreamReader.ReadToEnd(); 33 34 myStreamReader.Close(); 35 myResponseStream.Close(); 36 return retString; 37 }
直接用WebClient不行么?
我一想用,但是url是模拟地址,正真的地址我这没有,所以只能这样写
post的方法,我还不知道咋写,求解决
@mr_hj: 你用ie打开,开始是乱码,然后你右键,选择编码,换成utf8是看到正确的东西的,然后我用fiddler看了下请求,有几个header:
GET /weather_mini?city=%E5%8C%97%E4%BA%AC HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: wthrcdn.etouch.cn
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
你自己用WebClient,加上这几个Header试试。。。
@顾晓北: 我试试
@mr_hj: 另外,参考一下这个地址,http://blog.csdn.net/updownlife/article/details/7624179
@顾晓北: 我好长时间没有用WebClient,咋玩的
@mr_hj: 自己网上搜
总算搞好了,是gzip压缩的问题,获取得byte[]是gzip压缩的数据,需要解压缩,网上搜一下吧,这样你记的清楚。。。
我估计接口那边返回的就是乱码,你换个接口试试
http://wthrcdn.etouch.cn/weather_mini?city=北京
这个地址是正确的,你可以试试,http://wthrcdn.etouch.cn/weather_mini?city=%E5%8C%97%E4%BA%AC
%E5%8C%97%E4%BA%AC对应"北京"
@mr_hj: 打开返回错误
@mr_hj: 北京不编码的话返回的就是乱码
@balahoho: 所以我百度了一个汉字转码方法
@mr_hj: 你转码以后就打不开了,所以和你转不转码没关系
@balahoho: 直接在IE地址栏上复制
http://wthrcdn.etouch.cn/weather_mini?city=%E5%8C%97%E4%BA%AC
但是用代码获取就不行了
@mr_hj:
照样是乱码。。
@balahoho: 右键选择编码,换成utf8是看到正确的东西,但是代码就不行了