为什么它在消息框而不是文本上显示问号

时间:2014-12-24 08:04:59

标签: c# .net httpwebrequest

为什么它在消息框而不是文本

上显示问号

enter image description here

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://teamxor.net/vb/tx48/"+ page);

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

StreamReader sr = new StreamReader(response.GetResponseStream());

string result = sr.ReadToEnd();

Regex r = new Regex("<div>.*?</div>");
MatchCollection mr = r.Matches(result);

foreach (Match m in mr)
{
    MessageBox.Show(m.Value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
}      

2 个答案:

答案 0 :(得分:5)

问题在于使用非默认代码页。您的HTML显示您正在使用代码页1256.您必须告诉.NET,否则它认为它是UTF-8:

StreamReader sr = new StreamReader( response.GetResponseStream()
                                  , Encoding.GetEncoding(1256) // <-- this one
                                  );

使用Encoding.GetEncoding获取正确的代码页。我建议使用UTF8,因为.NET很容易识别它。

答案 1 :(得分:4)

Web服务器可以以他们想要的任何编码返回响应,尽管他们通常选择与浏览器的首选语言匹配的编码。

使用的编码作为charset标头的Content-Type元素返回。在.NET中,您可以检索HttpWebResponse.CharacterSet属性中使用的编码。您可以使用返回的charset构造一个Encoding对象来用于读取响应:

var charset= response.CharacterSet;
var encoding = Encoding.GetEncoding(charset);
var sr= new StreamReader(response.GetResponseStream(),encoding);
....