KeyNotFoundException с использованием метода HtmlEntity.DeEntitize ()

c# html-agility-pack keynotfoundexception

Вопрос

В настоящее время я работаю над скребком, написанным на C # 4.0. Я использую различные инструменты, включая встроенные функции WebClient и RegEx .NET. Для части моего скребка я разбираю HTML-документ с помощью HtmlAgilityPack. Я получил все, чтобы работать, как я желал, и прошел через очистку кода.

Я использую метод HtmlEntity.DeEntitize() для очистки HTML. Я сделал несколько тестов, и этот метод, казалось, отлично работал. Но когда я реализовал метод в своем коде, я продолжал получать KeyNotFoundException . Больше никаких подробностей нет, поэтому я довольно потерян. Мой код выглядит так:

WebClient client = new WebClient();
string html = HtmlEntity.DeEntitize(client.DownloadString(path));
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

Загруженный HTML кодируется в кодировке UTF-8. Как я могу обойти исключение KeyNotFound ?

Популярные ответы

Четыре года спустя, и у меня такая же проблема с некоторыми закодированными символами (версия 1.4.9.5). В моем случае существует ограниченный набор символов, которые могут вызвать проблему, поэтому я только что создал функцию для выполнения замен:

// to be called before HtmlEntity.DeEntitize
public static string ReplaceProblematicHtmlEntities(string str)
{
    var sb = new StringBuilder(str);
    //TODO: add other replacements, as needed
    return sb.Replace(".", ".")
        .Replace("ă", "ă")
        .Replace("â", "â")
        .ToString();
}

В моем случае строка содержит как html-кодированные символы, так и символы UTF-8, но проблема связана только с некоторыми закодированными символами.

Это не изящное решение, а быстрое исправление для всего текста с ограниченным (и известным) количеством проблемных кодированных символов.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему