【问题标题】:Displaying iso-8859-1 chars in c# with monotouch在 c# 中使用 monotouch 显示 iso-8859-1 字符
【发布时间】:2010-01-04 16:01:08
【问题描述】:

我正在从 REST Web 服务读取 XML 文件,对其进行解析,并在 UITableView 中显示详细信息。 XML 文件编码为 iso-8859-1 并包含重音字符。如果我只是将字符串添加到表格视图中,则会显示一个垃圾字符,因此我尝试将其转换为 UTF8,但它被转换为问号,这意味着它不理解该字符。

代码如下:

foreach(XmlNode myNode in myNodeList)
{
    Encoding isoEnc = Encoding.GetEncoding ("iso-8859-1");

    string utfResult = Encoding.UTF8.GetString (isoEnc.GetBytes(myNode.InnerText));

    _myCollection.Add(utfResult);
}

知道这里发生了什么,以及如何显示重音字符?

【问题讨论】:

    标签: c# iphone xamarin.ios


    【解决方案1】:

    好的,问题现在解决了。看来我的错误是假设 StreamReader 默认会处理 iso-8859-1 编码。我改变了我的 StreamReader 构造函数:

    StreamReader reader = new StreamReader (response.GetResponseStream ());
    

    到:

    StreamReader reader = new StreamReader (response.GetResponseStream (), Encoding.GetEncoding("iso-8859-1"));
    

    通过告诉 StreamReader 期待正确的编码,其他一切都会到位。

    【讨论】:

      【解决方案2】:

      嗯,您对 UTF-8 的“转换”非常可疑。您基本上是在说您比 XML 文件更了解 - 尽管它声称是 ISO-8859-1,但您真的知道它是用 UTF-8 编码的.你有理由相信吗?

      如果您知道这些字符的含义,我建议您添加一些日志记录以指示这些字符的 Unicode 值(作为整数)并将它们与 code charts on Unicode.org 进行比较。然后你就会知道你的问题是显示字符,还是首先从提要中读取它们。

      【讨论】:

      • 乔恩,谢谢。我已经这样做了,它看起来好像是在阅读中而不是在显示中。 XML 使用 encoding="iso-8859-1" 定义,但如果我使用 myNode.InnerText 构建从节点获取的字符串的字节数组,则字节为 3F,这是一个问号。如果我构建一个 unicode 数组,它会返回 FFFD,它是菱形中的问号,这是 UITableView 上显示的内容。
      • 不要从解析的 XML 构建字节数组 - 在十六进制编辑器中查看 XML 本身。或者,使用 InnerText 但不要将其转换为字节数组 - 将第一个字符转换为整数。请注意,U+FFFD 是“替换”字符,用于 Unicode 不支持的字符。听起来很可疑。
      • 到达那里。有问题的字符串是“Ynys Môn”,在这种情况下,重音字符显然是问题所在。在十六进制编辑器中查看 XML,我可以看到字符是 F4,这是正确的。如果我使用上面的方法创建一个字符串,并将其显示在 UITableView 中,那么它显示得很好。但是从该节点的 InnerText 属性中删除 char,将其转换为 int,它会给出 65533(或 U+FFFD)。这是代码: char tmpChar = Convert.ToChar (myNode.InnerText.Substring (6, 1)); int charVal = Convert.ToInt32 (tmpChar); Console.WriteLine(charVal);
      • 这种暗示在从 XML 文档中获取字符串时丢失了一些东西。
      猜你喜欢
      • 1970-01-01
      • 2015-12-30
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多