其實很多時候我們在做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)前正確編碼方式,來確定

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

根據(jù)當(dāng)前返回的類型正確的編碼方式來讀對應(yīng)的流即可解決問題。

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

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

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

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

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

這種方式了,而是應(yīng)該使用Gzip的流的方式

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

當(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)在瀏覽器中我們看到

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

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

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

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

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

當(dāng)我們采用默認(rèn)請求方式時,使用UTF-8

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

結(jié)果為:photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

 悲催啊。。。

加斷點,查看Response中相關(guān)信息,我們看到對應(yīng)的Header中內(nèi)容編碼方式為gzip方式。。。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

直接修改這部分流的讀取方式如下:
photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

返回結(jié)果為:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

結(jié)果正常了。。。所以面對這種亂碼問題應(yīng)該細(xì)心去查請求和響應(yīng)頭和內(nèi)容中的各種信息。

以此小經(jīng)驗作個小記錄