2011-08-16 78 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