【问题标题】:“É” become “é” C# Encoding from UTF-8 to ISO-8859-1“É” 变成 “é” C# 编码从 UTF-8 到 ISO-8859-1
【发布时间】: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-8 ContentEncoding 吗?
  • 嗯,如果文档中存在编码元标记,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


【解决方案1】:

也许你已经解决了这个问题,但请按照对我有用的代码(我有类似的问题)

byte[] data = Encoding.Default.GetBytes("Nice Café");
string output = Encoding.UTF8.GetString(data);

DotnetFiddle 中的结果:

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多