KeyNotFoundException avec la méthode HtmlEntity.DeEntitize ()

c# html-agility-pack keynotfoundexception

Question

Je travaille actuellement sur un grattoir écrit en C # 4.0. J'utilise divers outils, y compris les fonctionnalités intégrées WebClient et RegEx de .NET. Pour une partie de mon grattoir, je suis en train d'analyser un document HTML avec HtmlAgilityPack. J'ai tout fait fonctionner comme je voulais et j'ai nettoyé le code.

J'utilise la méthode HtmlEntity.DeEntitize() pour nettoyer le code HTML. J'ai fait quelques tests et la méthode a semblé bien fonctionner. Mais lorsque j'ai implémenté la méthode dans mon code, j'ai continué à avoir KeyNotFoundException . Il n'y a pas d'autres détails alors je suis assez perdu. Mon code ressemble à ceci:

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

Le code HTML téléchargé est codé en UTF-8. Comment puis-je contourner l'exception KeyNotFound ?

Réponse populaire

Quatre ans plus tard, j'ai le même problème avec certains caractères encodés (version 1.4.9.5). Dans mon cas, un nombre limité de caractères pouvant générer le problème, je viens de créer une fonction pour effectuer les remplacements:

// 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();
}

Dans mon cas, la chaîne contient à la fois des caractères codés HTML et des caractères UTF-8, mais le problème ne concerne que certains caractères codés.

Ce n'est pas une solution élégante, mais une solution rapide pour tous les textes contenant un nombre limité (et connu) de caractères codés problématiques.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi