Pregunta acerca de las codificaciones: ¿Cómo puedo hacer una salida de HtmlAgilityPack a un StringWriter y mantener la codificación?

.net c# encoding html-agility-pack

Pregunta

Estoy leyendo html con HtmlAgilityPack, lo edito y luego lo envío a un StreamWriter. La codificación HtmlAgilityPack es Latin1, y el StreamWriter es UnicdeEncoding.

Estoy perdiendo algunos caracteres en la conversión, y no quiero serlo.

Parece que no puedo cambiar la codificación de un StreamWriter. ¿Cuál es la mejor solución para este problema?

Respuesta aceptada

Si la página web es realmente Latin-1 (ISO-8859-1), no puede tener ninguna cita en ella; Latin-1 no tiene mapeos para esos personajes. Si puede ver citas en forma de rizos cuando abre la página en su navegador, podrían tener la forma de entidades HTML ( “ y ” o “ y ” ). Pero sospecho que la codificación de la página es realmente windows-1252 a pesar de lo que dicen los encabezados y las declaraciones incrustadas.

windows-1252 es idéntico a Latin-1, excepto que reemplaza los caracteres de control en el rango \x80..\x9F (decimal 128..159 ) con caracteres de impresión más útiles (o al menos más bonitos). Si HtmlAgilityPack toma la página con su palabra y la decodifica como ISO-8859-1, convertirá \x93 al carácter de control \u0093 , que se verá como basura si puede hacer que se muestre. Mientras tanto, el navegador lo convertirá a \u201C , el punto de código Unicode para la \u201C doble izquierda.

No estoy familiarizado con HtmlAgilityPack y no puedo encontrar ningún documento para ello, pero intentaría forzarlo a usar windows-1252. Por ejemplo, puede crear un StreamReader de Windows-1252 (o "ANSI") y hacer que HAP use eso.


Respuesta experta

En una conjetura; escribir en una Stream (no una string ). Si escribe en una string (incluyendo StringWriter / StringBuilder , está utilizando implícitamente la cadena UTF-16 de .NET.

Si solo quieres modificar la codificación reportada (pero usa una string ), mira la respuesta de Jon aquí .




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué