KeyNotFoundException con l'utilizzo del metodo HtmlEntity.DeEntitize ()

c# html-agility-pack keynotfoundexception

Domanda

Attualmente sto lavorando su un raschietto scritto in C # 4.0. Uso vari strumenti, tra cui le funzionalità WebClient e RegEx integrate di .NET. Per una parte del mio raschiatore sto analizzando un documento HTML usando HtmlAgilityPack. Ho ottenuto tutto per funzionare come desideravo e ho subito un po 'di pulizia del codice.

Sto usando il metodo HtmlEntity.DeEntitize() per ripulire l'HTML. Ho fatto alcuni test e il metodo sembrava funzionare alla grande. Ma quando ho implementato il metodo nel mio codice ho continuato a ricevere KeyNotFoundException . Non ci sono ulteriori dettagli quindi sono piuttosto perso. Il mio codice assomiglia a questo:

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

L'HTML scaricato è codificato in UTF-8. Come posso aggirare l'eccezione KeyNotFound ?

Risposta popolare

Quattro anni dopo e ho lo stesso problema con alcuni caratteri codificati (versione 1.4.9.5). Nel mio caso, esiste un insieme limitato di caratteri che potrebbero generare il problema, quindi ho appena creato una funzione per eseguire le sostituzioni:

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

Nel mio caso, la stringa contiene sia caratteri codificati in html sia caratteri UTF-8, ma il problema è legato solo ad alcuni caratteri codificati.

Questa non è una soluzione elegante, ma una soluzione rapida per tutti quei testi con una quantità limitata (e conosciuta) di caratteri codificati problematici.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché