2011-12-02 121 views
1

我有從http web響應收到的字符編碼問題,我收到?而不是éHttpWebResponse編碼問題

我設置編碼爲Content-Type的網頁是text/javascript; charset=ISO-8859;

我的代碼是:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(..); 
request.Method = "GET"; 
request.AllowAutoRedirect = false; 
request.Referer = "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"; 
request.Headers.Add("DNT", "1"); 
request.Accept = "text/html,application/xhtml+xml,application/xml"; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream stream = response.GetResponseStream(); 
StreamReader sr = new StreamReader(stream, Encoding.GetEncoding("iso-8859-1")); 

char[] buf = new char[256]; 
int count; 
StringBuilder buffer = new StringBuilder(); 

while ((count = sr.Read(buf, 0, 256)) > 0) 
{ 
    buffer.Append(buf, 0, count); 
} 

string responseStr = buffer.ToString(); 
Console.WriteLine(responseStr); 
response.Close(); 
stream.Close(); 
sr.Close(); 

你能告訴我什麼是錯呢?

+0

你檢查http://stackoverflow.com/questions/1888933/c-sharp-httpwebresponse-header-encoding –

回答

1

你有沒有試過在UTF-8上設置它? 進一步你發送一個referrer,我認爲你試圖設置UserAgent。下面的代碼與您的代碼相同,但不會覆蓋字節數組並設置useragent和utf8編碼。

var request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "GET"; 
request.AllowAutoRedirect = false; 
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"; 
request.Headers.Add("DNT", "1"); 
request.Accept = "text/html,application/xhtml+xml,application/xml"; 

using(var response = (HttpWebResponse)request.GetResponse()) 
using(var stream = response.GetResponseStream()) 
using (var sr = new StreamReader(stream, Encoding.UTF8)) 
{ 
    string responseStr = sr.ReadToEnd(); 
    Console.WriteLine(responseStr); 
    response.Close(); 
    if (stream != null) 
     stream.Close(); 
    sr.Close(); 
} 
+0

順便說一句,這有一個很好的解釋,當utf8不工作時如何閱讀不同的編碼:http:/ /blogs.msdn.com/b/feroze_daud/archive/2004/03/30/104440.aspx –

+0

是的,我試過... – Jack

+0

我檢查出鏈接。謝謝。 – Jack

2

嘗試添加下面你讓你的請求之前:

request.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1"); 

順便說一句,你應該讓你的StreamReader與ISO-8859-1(而不是UTF8),如果您想嘗試一下我提出的解決方案。祝你好運!

+0

不適合我 – Jack