zoukankan      html  css  js  c++  java
  • 关于Http请求后返回json乱码的问题

    其实很多时候我们在做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 + " ";
    }

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

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

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

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

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

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

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

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

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

    默认在浏览器中我们看到

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

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

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

    结果为:

     悲催啊。。。

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

    直接修改这部分流的读取方式如下:

    返回结果为:

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

    以此小经验作个小记录

  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/zhaohongtian/p/6810265.html
Copyright © 2011-2022 走看看