【发布时间】:2017-01-10 11:28:42
【问题描述】:
我在使用htmlagilitypack 时将UTF-8 转换为ISO-8859-1 时遇到问题
string url = "http://www.example.com";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
HtmlDocument htmldocument = new HtmlDocument();
htmldocument.Load(response.GetResponseStream(), Encoding.UTF8);
HtmlNode headnode = htmldocument.DocumentNode.SelectSingleNode("//head");
HtmlNode titlenode = headnode.SelectSingleNode(".//title");
string title = titlenode.InnerText;
标题输出为Nice Café
这就是我尝试编码的方式
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(title);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string Fixedtitle = iso.GetString(isoBytes);
固定标题输出应为Nice Café
我认为问题在于 iso-8859-1 被错误地强制转换为 UTF-8。但我无法修复输出文本。
请帮助我。最好的问候。
【问题讨论】:
-
您的示例代码忽略了响应标头,其中可能包含编码。使用
htmldocument.Load(response.GetResponseStream(), response.ContentEncoding) -
@LucasTrzesniewski:感谢您通知我。我的示例网址有
<meta charset="UTF-8">存在,所以我应该设置 UTF-8ContentEncoding吗? -
嗯,如果文档中存在编码元标记,HAP 应该已经提取了它。但是MDN says “HTTP Content-Type 标头和任何 BOM 元素都优先于该元素。”,因此您仍然可以尝试使用响应的编码。我从未使用过 HAP,所以我不知道它是否符合标准。
-
我试过但没有运气,我认为
ISO-8859-1字符出现在网页上,当得到UTF-8的响应时,它无法将这些字符转换为UTF-8。如果我们可以稍后将输出字符串转换为ISO-8859-1,有没有办法就像我在我的代码中尝试的那样? -
我不会尝试手动转换,因为它们以后可能会失败。也许 HAP 中存在错误,您可以尝试使用 AngleSharp,看看它是否有同样的问题。
标签: c# .net encoding utf-8 html-agility-pack