【问题标题】:Converting Html utf-8 charset to ISO-8859-1 via C#通过 C# 将 Html utf-8 字符集转换为 ISO-8859-1
【发布时间】:2012-07-06 23:51:52
【问题描述】:

我一直在努力转换属性的 html 值,但没有任何成功。

这是我要转换的 HTML(确保字符集不会在此处显示,但是,我看到的和你看到的完全一样)。

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

好的,这个 htmlnode 的 VALUE 是“Administração - São Paulo - diurno”。

我正在使用 HtmlAgilityPack 来解析 HtmlPage,一旦我到达这个节点,它的 innerText 值就像这样:Administração â São Paulo â diurno

我假设页面的原始字符集是 UTF-8,因为这就是 html 上的编码标记对我说的。

如何将这个奇怪的字符串转换为:Administração - São Paulo - Diurno

我已经尝试过这些线程:thread onethread two 并没有解决我的问题

编辑:我通过 C# WebRequest Get 获取页面。

EDIT2:添加了 HtmlAgilityPack 标签

问题是孤立的:WebRequest 有时会弄乱 Html。

还有其他方法可以设置编码吗?我正在尝试:_webReq.Encoding = "ISO-8859-1"

提前致谢

【问题讨论】:

  • 我相信你应该用 HtmlAgilityPack 来标记它,看起来这就是问题所在。您是否从数据库中检索此数据?如果你在上面放一个分析器,数据是否正确显示?
  • 我将编辑以使其更清晰,并使用 HtmlAgilityPack 对其进行标记。我通过 webrequest c# 获取页面
  • 这也很重要。我相信您可以在通过 WebRequest 获取时设置编码,给我一分钟
  • 可以,我现在就试试。
  • 将编码设置为“ISO-8859-1”,无效。

标签: c# html html-agility-pack encode iso-8859-1


【解决方案1】:

经过一个小测试,您可以看到字符串没有正确编码回其原始形式。

样本测试:

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

打印出来:

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

如您所见,原始字符串使用UTF8 转换为字节,但随后又使用Default 编码转换回字符串。

这是错误的。

如果 WebRequest.GetResponse() 将字符串作为错误值返回,则该方法存在问题。尝试将 HttpWebRequest 上的 TransferEncoding 属性设置为 UTF8。

在设置 TransferEncoding 属性之前,您必须先将 SendChunked 属性设置为 true。通过将 TransferEncoding 设置为 null 来清除它对 SendChunked 的值没有影响。分配给 TransferEncoding 属性的值将替换任何现有内容。

或者您可以尝试在您打开的 StreamReader 上将编码设置为 UTF8。我可以看看你的代码吗?

【讨论】:

    【解决方案2】:

    我解决了:

        HtmlWeb Webget = new HtmlWeb();
        HtmlDocument doc = new HtmlDocument();
        Webget.AutoDetectEncoding = false;
        Webget.OverrideEncoding = Encoding.UTF8;
    
        doc_tmp.OptionOutputAsXml = true;
        doc_tmp.OptionReadEncoding = true;
        doc_tmp.OptionFixNestedTags = true;
        doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;
    
                doc_tmp.LoadHtml(tmp.InnerHtml);
                doc_tmp.Save(Console.Out);
    

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2014-07-04
      • 2020-01-25
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多