關於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方式。。。
直接修改這部分流的讀取方式如下:
返回結果為:
結果正常了。。。所以面對這種亂碼問題應該細心去查請求和響應頭和內容中的各種資訊。
以此小經驗作個小記錄