2011-08-16 126 views
1

我試圖閱讀包含內容中註冊商標符號的網頁,即®。但是,當我在下面的示例中使用quickwatch並查看sb時,我看到一個帶有問號而不是®的菱形。如果我將sb序列化並通過javascript將其顯示在另一個網頁中,則會發生同樣的問題。這是這個字符將如何出現在我的quickwatch窗口,或者我讀/解碼頁面不正確?代碼如下:閱讀網頁 - 爲非標準字符避免鑽石/問號

const int bufSize = 4096; 
    const int maxBytesToGet = 5000000; 
    byte[] buf = new byte[bufSize]; 
    StringBuilder sb = new StringBuilder(bufSize); 

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 

     using (Stream responseStream = response.GetResponseStream()) 
     { 
      while ((bytesToGet = responseStream.Read(buf, 0, buf.Length)) != 0) 
      { 
       sb.Append(Encoding.UTF8.GetString(buf, 0, bytesToGet)); 
       if (sb.Length > maxBytesToGet) break; 
      } 
     } 
    } 
+0

商標欺詐bot?我不斷收到這些垃圾郵件。任何人都知道一種方法來防止這一點除了使用圖像? – David

+0

我不明白你的評論 – Mike

+2

@David,我也沒有得到你的評論,也絕對沒有看到任何downvote的理由。這是一個非常簡單的關於編碼的問題。 –

回答

4

您假定響應是UTF8。您需要查看響應標題以查看實際的編碼。使用StreamReader代替Encoding.GetString也更容易。

string responseText; 

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    using (Stream responseStream = response.GetResponseStream()) 
    { 
     using(StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding(response.ContentEncoding))) 
     { 
      responseText = reader.ReadToEnd(); 
     } 
    } 
} 
+0

謝謝.........! – Mike

+0

另外我結束了使用response.CharacterSet而不是response.ContentEncoding – Mike