2014-12-04 61 views
2
Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
Stream receiveStream = response.GetResponseStream(); 
StreamReader readStream = new StreamReader(response.GetResponseStream(), encode); 
string ResponseJSON = readStream.ReadToEnd();  

這是我的代碼的一部分。C#StreamReader失敗,某些垃圾標誌顯示

我想創建一個https請求,然後得到響應字符串。

其實我的代碼在我沒有使用代理時工作得很好。

但是當我使用https代理時,程序失敗。

然後我檢查了調試模式,我發現響應字符串是垃圾的符號和字符。當我沒有使用代理服務器時,這種情況並沒有發生。

這是一個有關編碼的問題??但我一直使用相同的編碼,爲什麼只有當我使用代理代碼不工作?

對不起英文不好,如果有什麼不清楚的地方,請讓我澄清。 非常感謝。

回答

2

HTTP響應的編碼存儲在Content-Type標頭的charset屬性中。您可以通過HttpWebResponse.CharacterSet屬性訪問它。

看來你的代理正在改變響應的字符集爲其他東西。您應該檢查CharsetContentType屬性以查找它使用的編碼。也許代理改變了字符集到別的東西,甚至可能壓縮了它。

你應該讀流如前檢查Charset

if (response.CharacterSet!="utf-8") 
{ 
.... 
} 

UPDATE

看來響應GZIP壓縮。要自動解壓縮流,您應該設置HttpWebRequest.AutomaticDecompression屬性。這將正確的頭添加到請求自動解壓縮的響應,如:

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
var response=request.GetResponse(); 
var stream=response.GetResponseStream(); 
... 
+1

我發現,字符集和的contentType是UTF8但內容編碼gzip的。 gzip是否會導致問題? – 2014-12-04 10:59:27

+1

這意味着響應被壓縮。你需要在處理這個請求的請求中設置'AutomaticDecompression' – 2014-12-04 12:05:21