关于Http请求后返回json乱码的问题

时间:2021-06-03 05:24:55

其实很多时候我们在做http请求数据返回的时候经常会莫名发现会出现乱码,大部分时候我们都觉得是编码不对造成的。

一般情况下正常我们默认都是作个很简单的操作,直接使用UTF-8编码基本问题就搞定了

HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(strURL);
request.Method = "GET";
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
Stream s;
s = response.GetResponseStream();
string StrDate = "";
string strValue = "";

StreamReader Reader = new StreamReader(s, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
  strValue += StrDate + "\r\n";
}

基本问题就OK了,但有时候却并不一定,比如如果事实上编码并不是这样呢?
我们就需要去判断当前正确编码方式,来确定

关于Http请求后返回json乱码的问题

根据当前返回的类型正确的编码方式来读对应的流即可解决问题。

But 有时候却并不一定是编码造成的。。。

比如:如果使用了压缩呢???

假如在Header头中有压缩呢? 比如:我们使用了gzip

这时候就变了,我们不能再使用普通的

关于Http请求后返回json乱码的问题

这种方式了,而是应该使用Gzip的流的方式

关于Http请求后返回json乱码的问题

当然还有别的Header的设置,比如transEncoding等等,所以我们做这种数据请求的时候出现乱码不用慌,细心去分析Header头中返回的信息,根据Header中的相关设置作相关处理。

顺便说下本次其实也是在做一个天气预报的实验中发现了该乱码现象,

默认在浏览器中我们看到

关于Http请求后返回json乱码的问题

在多种浏览器中返回均是乱码,用IE11打开也是,但右键更改编码为UTF-8后正常

关于Http请求后返回json乱码的问题

But我们程序更改为UTF-8依然不行啊。。。

关于Http请求后返回json乱码的问题

当我们采用默认请求方式时,使用UTF-8

关于Http请求后返回json乱码的问题

结果为:关于Http请求后返回json乱码的问题

悲催啊。。。

加断点,查看Response中相关信息,我们看到对应的Header中内容编码方式为gzip方式。。。

关于Http请求后返回json乱码的问题

直接修改这部分流的读取方式如下:
关于Http请求后返回json乱码的问题

返回结果为:

关于Http请求后返回json乱码的问题

结果正常了。。。所以面对这种乱码问题应该细心去查请求和响应头和内容中的各种信息。

以此小经验作个小记录