ASP.NET Core HtmlAgilityPack Ошибки кодирования - PullRequest
0 голосов
/ 09 декабря 2018

Есть несколько сообщений, касающихся вопросов кодирования и 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-8 или iso-8859-1 * * 1021.Символ * преобразуется в (а также ä, ö, ü).Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

вместо Encoding.Unicode используйте:

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

(протестировано на вашем веб-сайте и на немецком языке)

, чтобы получить правильную кодировку, проверьте заголовок целевого веб-сайта.он содержит правильный намек:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
0 голосов
/ 09 декабря 2018

Ваш сайт неправильно настроен, и реальная кодировка 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);
...