Я читаю XML-файл из веб-службы REST, анализируя его и отображая детали в UITableView. XML-файл закодирован как iso-8859-1 и содержит символы с акцентом. Если я просто добавлю строку в табличное представление, я получаю символ нежелательной почты, поэтому я попытался преобразовать его в UTF8, но он преобразуется в знак вопроса, подразумевая, что он не понимает символ.Отображение символов iso-8859-1 в C# с monotouch
Вот код:
foreach(XmlNode myNode in myNodeList)
{
Encoding isoEnc = Encoding.GetEncoding ("iso-8859-1");
string utfResult = Encoding.UTF8.GetString (isoEnc.GetBytes(myNode.InnerText));
_myCollection.Add(utfResult);
}
Любые идеи, что здесь происходит, и как отображать акцентированные символы?
Джон, спасибо за это. Я сделал именно это, и похоже, что это в чтении, а не в отображении. XML, определенный с помощью кодирования = «iso-8859-1», но если я построю массив байтов строки, взятой из узла, используя myNode.InnerText, тогда байт будет 3F, который является вопросительным знаком. Если я создам массив юникодов, он возвращает мне FFFD, что является вопросительным знаком в алмазе, что и отображается в UITableView. –
Не создавайте массив байтов из проанализированного XML - посмотрите на сам XML в шестнадцатеричном редакторе. Альтернативный, используйте InnerText, но не преобразовывайте его в массив байтов - переведите первый символ в целое. Обратите внимание, что U + FFFD является символом замены, который предназначен для символов, которые не поддерживаются Unicode. Звучит подозрительно. –
Как добраться. Строка, о которой идет речь, - «Ynys Môn», с акцентированным символом, очевидно, являющимся проблемой в этом случае. Глядя на XML в шестнадцатеричном редакторе, я вижу, что char - это F4, что верно. Если я создаю строку, используя приведенное выше, и отобразите ее в UITableView, тогда она отобразится нормально. Но измельчите char из свойства InnerText этого узла, преобразуйте его в int, он дает 65533 (или U + FFFD). Вот код: char tmpChar = Convert.ToChar (myNode.InnerText.Substring (6, 1)); int charVal = Convert.ToInt32 (tmpChar); Console.WriteLine (charVal); –