2013-07-23 60 views
0

爲什麼WebClient或HttpWebResponce/Request與我在瀏覽器中查看頁面源時的編碼有所不同?另外,如果他們找不到正確的編碼,他們會顯示我奇怪的符號。例如:當我試圖下載 - http://www.li.ru - 在頁面源代碼中是utf-8,並且從WebClient或HttpWebResponce/Request中下載了windows-1251。C#將html頁面下載爲一個字符串按原樣?

任何幫助,將不勝感激。

回答

0

您只需強制在您請求的網頁上進行編碼。

隨着Web客戶端您執行以下操作:

using(WebClient webClient = new WebClient()) 
{ 
    webClient.Encoding = Encoding.UTF8; 
    string s = webClient.DownloadString("http://wwww.li.ru"); 
} 

隨着HttpWebResponse /請求:

HttpWebRequest webRequest = HttpWebRequest.CreateHttp("http://www.li.ru"); 
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse()) 
{ 
    using (Stream resStream = response.GetResponseStream()) 
    { 
     StreamReader reader = new StreamReader(resStream, Encoding.UTF8); 
     return reader.ReadToEnd(); 
    } 
} 

編輯:

就在固定的編碼延伸到下面的代碼:

var enc = Encoding.Default; 
if (!string.IsNullOrEmpty(response.CharacterSet)) 
{ 
    var charSet = response.CharacterSet; 
    if (charSet == "ISO-8859-1") 
     charSet = "windows-1251"; 

    enc = Encoding.GetEncoding(charSet); 
} 

StreamReader reader = new StreamReader(resStream, enc); 
return reader.ReadToEnd(); 

爲了進一步的說明,你可以給這個網頁一看: http://blogs.msdn.com/b/feroze_daud/archive/2004/03/30/104440.aspx

+0

感謝您的快速反應,但如果我有幾頁有不同的編碼......這會讓其他頁面不可讀。 – Jake

+0

看看我編輯的答案。 –

+0

這個效果更好,但仍然有一個... http://www.jino.ru - 它仍然顯示我奇怪的符號。 – Jake

相關問題