首页 文章

ASP.NET Core HtmlAgilityPack编码错误

提问于
浏览
0

有一些关于编码问题的帖子和 HtmlAgilityPack 但是这个问题没有得到解决:

因为我尝试解析的网站包含像 ä 这样的Unicode符号, ü 我尝试将编码设置为Unicode:

public class WebpageDeserializer
{
    public WebpageDeserializer() {}

    /*
     * Example address: https://www.dslr-forum.de/showthread.php?t=1930368
    */
    public static void Deserialize(string address)
    {
        var web = new HtmlWeb();
        web.OverrideEncoding = Encoding.Unicode;
        var htmlDoc = web.Load(address);
        //further decoding fails because unicode decoded characters are not proper html (looks more like chinese)
    }
}

但现在

htmlDoc.DocumentNode.InnerHtml

看起来像这样:

π佄呃偙⁅汭倠䉕䥌⼯㍗⽃堠堠䱍䱍〮〮吠莹莹莹⽬⽬⽬≎≎≎≎≎

如果我尝试使用 UTF-8iso-8859-1 ,则 符号将转换为 (以及 äöü ) . 我怎样才能解决这个问题?

2 回答

  • 0

    而是 Encoding.Unicode 使用:

    web.OverrideEncoding = Encoding.GetEncoding("iso-8859-1");
    

    (使用您的网站和德语变音符号测试)

    获取正确的编码检查目标网站的 Headers . 它包含正确的提示:

    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    
  • 1

    您的网站配置错误,实际编码为 cp1252 .

    下面的代码应该工作:

    var client = new HttpClient();
    var buf = await client.GetByteArrayAsync("https://www.dslr-forum.de/showthread.php?t=1930368");
    var html = Encoding.GetEncoding(1252).GetString(buf);
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    

相关问题