2011-04-22 80 views
3

我有編碼問題。當我得到網站的源代碼,我有: enter image description hereHttpWebResponse - 編碼問題

我設置編碼UTF8這樣的:

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
      string sourceCode = reader.ReadToEnd(); 

感謝您的幫助!

+1

您確定您從流中獲取的數據具有UTF8編碼嗎?它似乎不是真的 – 2011-04-22 13:08:28

+0

我使用螢火蟲來檢查編碼。 Content-Type:text/html; charset = UTF-8 – carck3r 2011-04-22 14:40:34

+0

我不得不使用Accept-Encoding標頭註釋此行。有用。 – carck3r 2011-05-03 13:25:39

回答

2

但是,響應可能不是UTF-8。您是否檢查過響應對象的CharacterSetContentType屬性以確保您使用正確的編碼?

在任何情況下,這兩個字符看起來都像代碼頁437個字符,用於值03和08.它看起來像是數據流中有一些二進制數據。

我建議,爲了調試,您使用Stream.Read將響應中的前幾個字節讀取到字節數組中,然後檢查值以查看所得結果。

+0

response.CharacterSet =「UTF-8」; response.ContentType =「text/html; charset = UTF-8」; – carck3r 2011-04-22 14:43:36

+0

當我調試時,我得到這些值(256大小的數組):http://lulzimg.com/i19/2e6ee1.png – carck3r 2011-04-22 14:51:30

+0

這確實看起來像二進制數據給我,特別是在開始。你期望得到什麼? – 2011-04-22 16:13:19

5

嘗試使用指定的編碼:

Encoding encoding = Encoding.UTF8; 
try 
{ 
    if (response != null && !string.IsNullOrEmpty(response.CharacterSet)) 
     encoding = Encoding.GetEncoding(response.CharacterSet); 
} 
catch (ArgumentException) 
{ 
    // Cannot determine encoding, use assigned above 
} 

StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); 
     string sourceCode = reader.ReadToEnd(); 

如果您接受gzip的莫名其妙,這可能會幫助:(還沒有嘗試過自己,誠然它並沒有太大的意義,因爲你的編碼不gzip的?!)

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
+0

謝謝,但它不起作用。它讀取utf-8編碼(System.Text.UTF8Encoding),但有兩個相同的字符... – carck3r 2011-04-22 14:56:04

+3

也許是一個長鏡頭,但是,你是否有機會收到gzip? – ziya 2011-04-24 20:43:27

+0

FWIW,我使用了.AutomaticDecompression,當響應未編碼時,它仍然正常工作。 – 2014-05-21 22:36:06

0

更改這一行代碼:

using (StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding(1251))) 

它可以幫助你..

0

我有同樣的問題,我試着改變編碼,從源頭到結果,我什麼都沒有。在最後,我遇到一個線程這導致我下面...... 採取看看這裏... .NET: Is it possible to get HttpWebRequest to automatically decompress gzip'd responses?

你需要使用下面的代碼,從檢索請求的響應之前。

rqst.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 

,因爲一旦我們使用接受編碼「的gzip」或「放氣」,數據得到了壓縮,而轉向由我們不可讀的數據。所以我們需要解壓縮它們。