为什么它在消息框而不是文本
上显示问号
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);
}
答案 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);
....