Net WebClient 编码不工作

Net WebClient Encoding not working

我正在尝试使用 .NET WebClient 解析 html 文档,但我得到的字符不正确。我已经配置了很多编码,但我找不到为什么我弄错了:

URL 是 http://www.vatican.va/archive/ESL0506/__P2.HTM

这是我的代码(您可以在 ConsoleApp 中测试它)

    static void Main(string[] args)
    {
        WebClient client = new WebClient();
        client.Encoding = Encoding.GetEncoding(28591);
        var htmlCode = client.DownloadString("http://www.vatican.va/archive/ESL0506/__P2.HTM");

        var splittedHtml = htmlCode.Split('<').ToList();

        var htmlVerses = splittedHtml.Where(x => x.StartsWith("p class=MsoNormal align=left")).ToList();
    }

然后,在 htmlVerses 中我得到如下字符串:

"p class=MsoNormal align=left style='margin-left:0cm;text-align:left;\ntext-indent:0cm'>3 Entonces Dios dijo: &laquo;Que\nexista la luz&raquo;. Y la luz existi&oacute;."

检查这部分:3 Entonces Dios dijo: &laquo;Que\nexista la luz&raquo;. Y la luz existi&oacute;

它没有很好地解析。应该是:3 Entonces Dios dijo: «Que exista la luz». Y la luz existió.

如果我们检查 chrome 源代码,我们会得到:

然后我尝试从 http://www.generateit.net/seo-tools/source-viewer/ 获取源代码,我得到的异常与我的应用程序中的一样。

真的很奇怪,网页使用的编码是charset=iso-8859-1,和我的webclient使用的一样。

如有任何帮助,我们将不胜感激。

HTML 转义传输的特殊字符,需要转换回来。 幸运的是,.NET 提供了自动为您执行此操作的方法:

HttpUtility.HtmlDecode()

参见:MSDN

如果您使用的是 .NET 4.5,则可以改用 WebUtility.HtmlDecode(),它已包含在 System.Net 中(参见:MSDN