Convertir el conjunto de caracteres Html utf-8 a ISO-8859-1 a través de C #

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

Pregunta

He estado luchando para convertir un valor html de un atributo, sin ningún éxito.

Aquí está el HTML que estoy tratando de convertir (seguro que el conjunto de caracteres no se mostrará aquí, pero, lo veo exactamente como lo ve usted).

<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>

De acuerdo, el VALOR de este htmlnode es "Administração - São Paulo - diurno".

Estoy usando HtmlAgilityPack para analizar la página Html para esto, y una vez que llego a este nodo, su valor de texto interno es como este: Administração â São Paulo â diurno

Supongo que el conjunto de caracteres original de la página es UTF-8 porque eso es lo que me dice la etiqueta de codificación en el html.

¿Cómo puedo convertir esta cadena extraña a: Administração - São Paulo - Diurno ?

Ya probé estos hilos: el hilo uno y el hilo dos y nada resolvió mi problema

EDITAR: Obtengo la página a través de C # WebRequest Get.

EDIT2: Se agregó la etiqueta HtmlAgilityPack

El problema fue aislado: WebRequest está malgastando el HTML a veces.

¿Hay alguna otra manera de establecer la codificación? Estoy intentando: _webReq.Encoding = "ISO-8859-1"

Gracias por adelantado

Respuesta aceptada

Después de una pequeña prueba, puede ver que la cadena no está volviendo a codificar correctamente a su forma original.

Prueba de muestra:

 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);

Esto imprime:

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

Como puede ver, la cadena original se está convirtiendo a bytes usando UTF8 , pero luego se está convirtiendo nuevamente en una cadena usando la codificación predeterminada .

Esto está mal.

Si WebRequest.GetResponse () está devolviendo la cadena como un valor incorrecto, entonces hay un problema con ese método. Intente establecer la propiedad TransferEncoding en HttpWebRequest en UTF8.

Antes de que pueda establecer la propiedad TransferEncoding, primero debe establecer la propiedad SendChunked en true. Borrar la codificación de transferencia configurándola en nula no tiene ningún efecto sobre el valor de SendChunked. Los valores asignados a la propiedad TransferEncoding reemplazan cualquier contenido existente.

O puede intentar establecer la codificación en UTF8 en el StreamReader que abre. ¿Puedo ver tu código?


Respuesta popular

Resolví 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);



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é