其實很多時候我們在做http請求數(shù)據(jù)返回的時候經(jīng)常會莫名發(fā)現(xiàn)會出現(xiàn)亂碼,大部分時候我們都覺得是編碼不對造成的。
一般情況下正常我們默認(rèn)都是作個很簡單的操作,直接使用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了,但有時候卻并不一定,比如如果事實上編碼并不是這樣呢?
我們就需要去判斷當(dāng)前正確編碼方式,來確定
根據(jù)當(dāng)前返回的類型正確的編碼方式來讀對應(yīng)的流即可解決問題。
But 有時候卻并不一定是編碼造成的。。。
比如:如果使用了壓縮呢???
假如在Header頭中有壓縮呢? 比如:我們使用了gzip
這時候就變了,我們不能再使用普通的
這種方式了,而是應(yīng)該使用Gzip的流的方式
當(dāng)然還有別的Header的設(shè)置,比如transEncoding等等,所以我們做這種數(shù)據(jù)請求的時候出現(xiàn)亂碼不用慌,細(xì)心去分析Header頭中返回的信息,根據(jù)Header中的相關(guān)設(shè)置作相關(guān)處理。
順便說下本次其實也是在做一個天氣預(yù)報的實驗中發(fā)現(xiàn)了該亂碼現(xiàn)象,
默認(rèn)在瀏覽器中我們看到
在多種瀏覽器中返回均是亂碼,用IE11打開也是,但右鍵更改編碼為UTF-8后正常
But我們程序更改為UTF-8依然不行啊。。。
當(dāng)我們采用默認(rèn)請求方式時,使用UTF-8
結(jié)果為:
悲催啊。。。
加斷點(diǎn),查看Response中相關(guān)信息,我們看到對應(yīng)的Header中內(nèi)容編碼方式為gzip方式。。。
直接修改這部分流的讀取方式如下:
返回結(jié)果為:
結(jié)果正常了。。。所以面對這種亂碼問題應(yīng)該細(xì)心去查請求和響應(yīng)頭和內(nèi)容中的各種信息。
以此小經(jīng)驗作個小記錄
http://www.cnblogs.com/AreaWhere/p/6536065.html