0

我一直在努力转换属性的 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

我已经尝试过这些线程:线程一线程二 并没有解决我的问题

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

EDIT2:添加了 HtmlAgilityPack 标签

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

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

提前致谢

4

2 回答 2

2

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

样品测试:

 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转换为字节,但随后又使用默认编码转换回字符串。

这是错误的。

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

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

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

于 2012-07-06T14:26:09.023 回答
0

我解决了:

    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);
于 2017-04-20T15:11:00.630 回答