2011-07-15 95 views
1

我想寫一個代碼來閱讀一個網頁的內容,但我不確定在該頁面使用的編碼,所以我怎麼能寫一個通用的代碼,返回正確的字符串沒有奇怪的符號? 編碼可能是(「UTF-8」,「windows-1256」,...)。 我試過但UTF-8,但當頁面編碼與第二次提到的編碼我有一些奇怪的符號。如何編寫通用代碼來讀取使用不同編碼的HTML?

這裏是我使用的代碼:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SOME-URL"); 
request.Method = "GET"; 
WebResponse response = request.GetResponse(); 
StreamReader streamReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8); 
string content = streamReader.ReadToEnd(); 

這裏是引起該問題的鏈接: http://forum.khleeg.com/144828.html

回答

3

您必須檢查響應文本,以檢查該字段:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /> 

這個字符也會得到相應的解碼,因爲它們是ANSI。 據該標籤數據,你應該就這樣被GetEncoding方法創建Encoding對象:

var enc1 = Encoding.GetEncoding("windows-1256"); 
var enc2 = Encoding.GetEncoding(1256); 

另一種方法是使用HttpWebResponse的.ContentEncoding屬性:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
var enc1 = Encoding.GetEncoding(response.ContentEncoding); 

還是.CharacterSet財產:

string Charset = response.CharacterSet; 
var enc1 = Encoding.GetEncoding(Charset); 
+0

但這個標籤總是存在於網頁中嗎?我已經提到「windows-1256」作爲一個例子,它可能是任何其他編碼,任何建議來解決這個問題。 – Mousa

+1

@Mousa此標籤始終在使用非標準編碼的頁面上。但我已經爲此更新了答案。 – VMAtm

+3

它可能是'HttpWebResponse.CharacterSet'而不是'HttpWebResponse.ContentEncoding'。 –

0

您提到的頁面確實告訴您wh編碼它使用,這裏是在那裏找到的字符串。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /> 

難道你不能搜索像這樣的字符串,並根據這些信息行事嗎?