如何编写通用代码来读取用不同编码编码的html?

时间:2011-07-15 19:58:28

标签: c# asp.net character-encoding html-encode

我正在尝试编写一个代码来读取网页的内容,但我不确定该页面中使用的编码,那么如何编写一个返回正确字符串的通用代码而不会出现奇怪的问题符号? 编码可能是(“UTF-8”,“windows-1256”,......)。 我试过但是UTF-8但是当用第二个提到的编码编码页面时,我有一些奇怪的符号。

以下是我正在使用的代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SOME-URL");
request.Method = "GET";
WebResponse response = request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
string content = streamReader.ReadToEnd();

这是一个导致问题的链接: http://forum.khleeg.com/144828.html

2 个答案:

答案 0 :(得分:3)

您必须检查响应文本以检查此字段:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />

这些字符也将被正确解码,因为它们是ANSI。 根据此标记中的数据,您应该通过Encoding方法创建GetEncoding对象,如下所示:

var enc1 = Encoding.GetEncoding("windows-1256");
var enc2 = Encoding.GetEncoding(1256);

另一种方法是使用HttpWebResponse的.ContentEncoding属性:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var enc1 = Encoding.GetEncoding(response.ContentEncoding);

.CharacterSet属性:

string Charset = response.CharacterSet;
var enc1 = Encoding.GetEncoding(Charset);

答案 1 :(得分:0)

您提到的页面确实告诉您它使用的编码,这里是找到的字符串。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />

你不能搜索像这样的字符串并根据这些信息采取行动吗?