Domanda su Encodings: come posso esportare da HtmlAgilityPack a StringWriter e mantenere la codifica?

.net c# encoding html-agility-pack

Domanda

Sto leggendo html con HtmlAgilityPack, modificandolo, quindi trasferendolo su StreamWriter. HtmlAgilityPack Encoding è Latin1 e StreamWriter è UnicdeEncoding.

Sto perdendo alcuni personaggi nella conversione e non voglio esserlo.

Non riesco a modificare la codifica di StreamWriter. Qual è il migliore intorno a questo problema?

Risposta accettata

Se la pagina Web è in realtà Latin-1 (ISO-8859-1), non può contenere citazioni ricce; Latin-1 non ha mappature per quei personaggi. Se riesci a visualizzare le virgolette ricurve quando apri la pagina nel browser, potrebbero essere sotto forma di entità HTML ( “ e ” o “ ” ). Ma sospetto che la codifica della pagina sia veramente Windows 1252 nonostante quello che dicono le intestazioni e le dichiarazioni incorporate.

windows-1252 è identico a Latin-1 tranne che sostituisce i caratteri di controllo nell'intervallo \x80..\x9F (decimale 128..159 ) con caratteri di stampa più utili (o almeno più 128..159 ). Se HtmlAgilityPack sta prendendo la pagina alla sua parola e la decodifica come ISO-8859-1, convertirà \x93 nel carattere di controllo \u0093 , che apparirà come una spazzatura se è possibile visualizzarlo del tutto. Il browser, nel frattempo, lo convertirà in \u201C , il punto di codice Unicode per il marchio di virgolette doppie a sinistra.

Non ho familiarità con HtmlAgilityPack e non riesco a trovare alcun documento per questo, ma proverei a forzarlo a utilizzare Windows-1252. Ad esempio, è possibile creare uno StreamReader Windows-1252 (o "ANSI") e utilizzarlo come HAP.


Risposta esperta

A supposizione; scrivere su un Stream (non una string ). Se scrivi su una string (inc. StringWriter / StringBuilder , stai implicitamente utilizzando la stringa UTF-16 di .NET.

Se vuoi solo modificare la codifica riportata (ma usa una string ), guarda la risposta di Jon qui .




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é