Conversione del charset utt-8 Html in ISO-8859-1 tramite C #

c# encode html html-agility-pack iso-8859-1

Domanda

Ho faticato a convertire un valore html di un attributo, senza alcun successo.

Ecco l'HTML che sto cercando di convertire (sicuramente il charset non verrà mostrato qui, ma, lo vedo esattamente come lo vedi).

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

Va bene, il VALORE di questo htmlnode è "Administraçà £ o - Sà £ o Paulo - diurno".

Sto usando HtmlAgilityPack per analizzare HtmlPage per questo, e una volta raggiunto questo nodo, il suo valore innerText è proprio come questo: Administração â São Paulo â diurno

Sto assumendo che il set di caratteri originale della pagina sia UTF-8 perché questo è quello che mi dice il tag di codifica sull'html.

Come posso convertire questa stringa strana in: Administração - São Paulo - Diurno ?

Ho già provato questi thread: thread uno e thread due e niente ha risolto il mio problema

EDIT: Sto ottenendo la pagina tramite un WebRequest Get C #.

EDIT2: aggiunto il tag HtmlAgilityPack

Il problema era isolato: WebRequest a volte sta messaggiando l'Html.

C'è un altro modo per impostare la codifica? sto provando: _webReq.Encoding = "ISO-8859-1"

Grazie in anticipo

Risposta accettata

Dopo un piccolo test, puoi vedere che la stringa non sta riportando correttamente la codifica nella sua forma originale.

Test di esempio:

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

Questo stampa:

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

Come puoi vedere, la stringa originale viene convertita in byte usando UTF8 , ma poi viene convertita in una stringa usando la codifica predefinita .

Questo è sbagliato.

Se WebRequest.GetResponse () restituisce la stringa come valore errato, allora c'è un problema con quel metodo. Prova a impostare la proprietà TransferEncoding su HttpWebRequest su UTF8.

Prima di poter impostare la proprietà TransferEncoding, è necessario prima impostare la proprietà SendChunked su true. Cancellare TransferEncoding impostandolo su null non ha alcun effetto sul valore di SendChunked. I valori assegnati alla proprietà TransferEncoding sostituiscono tutti i contenuti esistenti.

Oppure puoi provare a impostare la codifica su UTF8 sullo StreamReader che apri. Posso vedere il tuo codice?


Risposta popolare

ho risolto con:

    HtmlWeb Webget = new HtmlWeb();
    HtmlDocument doc = new HtmlDocument();
    Webget.AutoDetectEncoding = false;
    Webget.OverrideEncoding = Encoding.UTF8;

    doc_tmp.OptionOutputAsXml = true;
    doc_tmp.OptionReadEncoding = true;
    doc_tmp.OptionFixNestedTags = true;
    doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;

            doc_tmp.LoadHtml(tmp.InnerHtml);
            doc_tmp.Save(Console.Out);


Related

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é