關於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 + "\r\n";
}

基本問題就OK了,但有時候卻並不一定,比如如果事實上編碼並不是這樣呢?
我們就需要去判斷當前正確編碼方式,來確定

根據當前返回的類型正確的編碼方式來讀對應的流即可解決問題。

But 有時候卻並不一定是編碼造成的。。。

比如:如果使用了壓縮呢???

假如在Header頭中有壓縮呢? 比如:我們使用了gzip

這時候就變了,我們不能再使用普通的

這種方式了,而是應該使用Gzip的流的方式

當然還有別的Header的設置,比如transEncoding等等,所以我們做這種數據請求的時候出現亂碼不用慌,細心去分析Header頭中返回的信息,根據Header中的相關設置作相關處理。

 

順便說下本次其實也是在做一個天氣預報的實驗中發現了該亂碼現象,

默認在瀏覽器中我們看到

在多種瀏覽器中返回均是亂碼,用IE11打開也是,但右鍵更改編碼為UTF-8后正常

But我們程序更改為UTF-8依然不行啊。。。

當我們采用默認請求方式時,使用UTF-8

結果為:

 悲催啊。。。

加斷點,查看Response中相關信息,我們看到對應的Header中內容編碼方式為gzip方式。。。

直接修改這部分流的讀取方式如下:

返回結果為:

結果正常了。。。所以面對這種亂碼問題應該細心去查請求和響應頭和內容中的各種信息。

以此小經驗作個小記錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM