2013-10-11 83 views
3

顯然,Google的編碼是UTF-8,因爲它是在html元標記中聲明的。 但是當我用ASP WebRequest.GetResponse()打開scharfes + s的搜索頁面時,它充滿了無法識別的字符。有人知道那裏發生了什麼嗎?谷歌的字符編碼是什麼?

爲了您的方便,代碼粘貼下面

ASP頁

<form id="form1" runat="server"> 
<div> 
    <div runat="server" id="output"/> 
</div> 
</form> 

代碼隱藏

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Net; 
using System.IO; 
using System.Text; 

public partial class SearchEngineCaller : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     HttpWebRequest queryPage = (HttpWebRequest)WebRequest.Create("https://www.google.com/search?q=scharfes+s"); 
     queryPage.Credentials = CredentialCache.DefaultCredentials; 

     HttpWebResponse response = (HttpWebResponse)queryPage.GetResponse(); 

     Stream receiveStream = response.GetResponseStream(); 
     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
     output.InnerHtml = readStream.ReadToEnd(); 
    } 
} 

Returned Result

我應該使用什麼編碼?

+0

當您直接從瀏覽器打開此頁面時是否看到相同的問題? https://www.google.com/search?q=scharfes+s – kol

+0

不。這一切都正確使用我的瀏覽器 –

+0

試試這個:http://stackoverflow.com/a/5861309/600135 – kol

回答

2

你必須設置一些HTTP標頭的HttpWebRequest對象:

HttpWebRequest queryPage = (HttpWebRequest)WebRequest.Create("https://www.google.com/search?q=scharfes+s"); 
queryPage.Credentials = CredentialCache.DefaultCredentials; 
queryPage.Accept = "text/html"; 
queryPage.Headers["Accept-Charset"] = "utf-8"; 
queryPage.UserAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0"; 

重要:設置Accept-Charset是不夠的,它設置User-Agent,也很重要(我從here複製上面的用戶代理字符串)。我試過這個解決方案,它適用於我(test code)。

+0

它確實有效!非常感謝! –

+0

不客氣:) – kol

+0

我真的很想知道你爲什麼幫助別人?是什麼激勵了你?我試着回覆他人的問題,但我很容易理解其他人的問題。我有無盡的工作要做。幫助別人永遠不是我的首要任務。我太自私了嗎? –