首页 新闻 会员 周边

C# mvc在控制器中分别用Get 和 post 模式调用天气url返回数据乱码

0
[已关闭问题] 关闭于 2016-10-20 10:10

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         }

 

 

 

 

 

 

 

 

mr_hj的主页 mr_hj | 菜鸟二级 | 园豆:202
提问于:2016-10-19 16:03
< >
分享
所有回答(2)
0

直接用WebClient不行么?

顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 16:08

我一想用,但是url是模拟地址,正真的地址我这没有,所以只能这样写

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:12

post的方法,我还不知道咋写,求解决

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:19

@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试试。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 16:32

@顾晓北: 我试试

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:38

@mr_hj: 另外,参考一下这个地址,http://blog.csdn.net/updownlife/article/details/7624179

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 16:42

@顾晓北: 我好长时间没有用WebClient,咋玩的

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:51

@mr_hj: 自己网上搜

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-10-19 16:52

 总算搞好了,是gzip压缩的问题,获取得byte[]是gzip压缩的数据,需要解压缩,网上搜一下吧,这样你记的清楚。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-10-20 10:58
0

我估计接口那边返回的就是乱码,你换个接口试试

balahoho | 园豆:2050 (老鸟四级) | 2016-10-19 16:15

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对应"北京"

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:18

@mr_hj: 打开返回错误

支持(0) 反对(0) balahoho | 园豆:2050 (老鸟四级) | 2016-10-19 16:20

@mr_hj: 北京不编码的话返回的就是乱码

支持(0) 反对(0) balahoho | 园豆:2050 (老鸟四级) | 2016-10-19 16:20

@balahoho: 所以我百度了一个汉字转码方法

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:22

@mr_hj: 你转码以后就打不开了,所以和你转不转码没关系

支持(0) 反对(0) balahoho | 园豆:2050 (老鸟四级) | 2016-10-19 16:24

@balahoho: 直接在IE地址栏上复制

http://wthrcdn.etouch.cn/weather_mini?city=%E5%8C%97%E4%BA%AC

但是用代码获取就不行了

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:29

@mr_hj: 

照样是乱码。。

支持(0) 反对(0) balahoho | 园豆:2050 (老鸟四级) | 2016-10-19 16:37

@balahoho: 右键选择编码,换成utf8是看到正确的东西,但是代码就不行了

 

支持(0) 反对(0) mr_hj | 园豆:202 (菜鸟二级) | 2016-10-19 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册