Je lit un fichier XML à partir d'un service Web REST, l'analyse et affiche les détails dans un UITableView. Le fichier XML est codé sous iso-8859-1 et contient des caractères accentués. Si j'ajoute juste la chaîne à la vue de table alors j'obtiens un caractère indésirable affiché, ainsi j'ai essayé de le convertir en UTF8 mais il est converti en un point d'interrogation, impliquant qu'il ne comprend pas le caractère.Affichage des caractères iso-8859-1 dans C# avec monotouch
Voici le code:
foreach(XmlNode myNode in myNodeList)
{
Encoding isoEnc = Encoding.GetEncoding ("iso-8859-1");
string utfResult = Encoding.UTF8.GetString (isoEnc.GetBytes(myNode.InnerText));
_myCollection.Add(utfResult);
}
Toutes les idées ce qui se passe ici, et comment afficher les caractères accentués?
Jon, merci pour cela. Je l'ai fait juste et il semble que ce soit dans la lecture par opposition à l'affichage. Le code XML défini avec encoding = "iso-8859-1", mais si je construis un tableau d'octets de la chaîne prise à partir du nœud en utilisant myNode.InnerText, alors l'octet est 3F qui est un point d'interrogation. Si je construis un tableau unicode, il me renvoie FFFD, qui est un point d'interrogation dans un losange, qui est ce qui est affiché sur UITableView. –
Ne construisez pas un tableau d'octets à partir du XML analysé - regardez le XML lui-même dans un éditeur hexadécimal. Alternative, utilisez InnerText mais ne le convertissez pas en un tableau d'octets: convertissez le premier caractère en entier. Notez que U + FFFD est le caractère "de remplacement", qui est destiné à être utilisé pour les caractères qui ne sont pas supportés par Unicode. Cela semble suspect. –
Comment y arriver. La corde en question est "Ynys Môn", avec le char accentué étant évidemment le problème dans ce cas. En regardant le XML dans un éditeur hexadécimal, je peux voir que le caractère est F4, ce qui est correct. Si je crée une chaîne en utilisant ce qui est indiqué ci-dessus et que je l'affiche dans UITableView, elle s'affiche correctement. Mais couper le char hors de la propriété InnerText de ce nœud, le convertir en un int, il donne 65533 (ou U + FFFD). Voici le code: char tmpChar = Convert.ToChar (myNode.InnerText.Substring (6, 1)); int charVal = Convert.ToInt32 (tmpChar); Console.WriteLine (charVal); –