2012-08-26 34 views
1

我試圖從google.com獲取html時遇到了編碼問題。請給我一個建議如何解決這個問題。非常感謝。HttpWebResponse編碼

public string Html 
    { 
     get 
     { 
      try 
      { 
       var request = WebRequest.Create(Url) as HttpWebRequest; 
       request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1,gzip(gfe)"; 
       if (request != null) 
       { 
        var response = request.GetResponse() as HttpWebResponse; 
        if (response != null) 
        { 
         string Charset = response.CharacterSet; 
         Encoding encoding = Encoding.GetEncoding(Charset); 
         var sr = new StreamReader(response.GetResponseStream(), encoding); 
         return sr.ReadToEnd(); 
        } 
       } 
       return string.Format("Could not create object HttpWebRequest for '{0}'", Url); 
      } 
      catch (Exception e) 
      { 
       return e.Message; 
      } 
     } 
    } 

這裏是一個形象,以及:

enter image description here

+0

只是一個提示: 查看「htmlagilitypack」 - 用於讀取所有類型的html文件(甚至無效)與編碼檢測的開源項目... – TheHe

+0

什麼是你的問題? – Joey

+0

我的問題是結果中的字符不正確。由於本網站的信譽較低,我無法添加圖片。但這是一個鏈接http://i.stack.imgur.com/QtoW6.png – MaxD

回答

1

你所面對的問題是,因爲某些原因,谷歌並沒有發出在頭的任何編碼信息。如果您使用下面的鏈接(特別是Content-Type標頭)檢查標題並比較第一個(從圖像中)和第二個標題,您會看到第一個缺少一些重要信息。

http://web-sniffer.net/?url=http://www.google.com.ua/intl/ils/ads/

http://web-sniffer.net/?url=http://www.google.de/

你需要做的,是先解析返回的HTML,並尋找一個<meta> - 元素指定的編碼,然後redecode您正在使用越來越流新的信息。取決於你之後用HTML做什麼,你可能想看看http://htmlagilitypack.codeplex.com/作爲一個偉大的庫來處理HTML,或者只是寫一個正則表達式來提取編碼(儘管我真的會推薦第一個替代方案)。