Mostrando caracteres ISO-8859-1 en C# con Monotouch
-
18-09-2019 - |
Pregunta
Estoy leyendo un archivo XML de un servicio web REST, analizándolo y mostrando los detalles en UITableView. El archivo XML está codificado como ISO-8859-1 y contiene caracteres acentuados. Si solo agrego la cadena a TableView, entonces obtengo un personaje basura, por lo que he intentado convertirla a UTF8, pero se convierte en un signo de interrogación, lo que implica que no entiende el personaje.
Aquí está el código:
foreach(XmlNode myNode in myNodeList)
{
Encoding isoEnc = Encoding.GetEncoding ("iso-8859-1");
string utfResult = Encoding.UTF8.GetString (isoEnc.GetBytes(myNode.InnerText));
_myCollection.Add(utfResult);
}
¿Alguna idea de lo que está pasando aquí y cómo mostrar los caracteres acentuados?
Solución
Ok, problema ahora resuelto. Parece que mi error suponía que el StreamReader trataría con la codificación ISO-8859-1 por defecto. Cambié mi constructor StreamReader de:
StreamReader reader = new StreamReader (response.GetResponseStream ());
a:
StreamReader reader = new StreamReader (response.GetResponseStream (), Encoding.GetEncoding("iso-8859-1"));
Al decirle al corredor de transmisión que espere la codificación correcta, todo lo demás simplemente cae en su lugar.
Otros consejos
Bueno, su "conversión" a UTF-8 es muy sospechosa. Básicamente estás diciendo que sabes mejor que el archivo XML, que aunque reclamación (es ser ISO-8859-1, De Verdad Sepa que estaba codificado en UTF-8. ¿Tienes alguna razón para creer eso?
Si sabe cuáles deben ser los personajes, le sugiero que agregue algunos registros para indicar los valores unicode de esos caracteres (como enteros) y compararlos con el cuadros de código en unicode.org. Entonces sabrás si tu problema está en visualización los personajes, o leerlos del feed en primer lugar.