【问题标题】:Does XMLRead.Create(new StringReader) provide capability to read non-unicode (BIG5)?XMLRead.Create(new StringReader) 是否提供读取非 unicode (BIG5) 的功能?
【发布时间】:2012-05-04 15:31:29
【问题描述】:

我正在尝试访问具有 BIG5 编码段落的网页。检索 xml 数据后,我使用 XMLRead.Create(new StringReader(xmldata)) 并从 XmlNodeType.Text 类型的 reader.Value 中获取 big5 个字符。在 WP 运行时,它不支持 BIG5 编码,所以我必须获取每个字节并转换为 unicode 才能在 WP7 上显示。但是,我从 reader.Value 获得的字节似乎不是我所期望的。例如,第一个汉字是 B5E1。但我得到了FDFD。这是怎么回事?

using (XmlReader reader = XmlReader.Create(new StringReader(xmldata)))  
while (reader.Read())  
    switch (reader.NodeType)  
        case XmlNodeType.Text:
            string s = reader.Value;  
            foreach (byte input in s)  
                # the input gives unexpected result  

要加载的网页是http://feeds.feedburner.com/nownews/politic

我正在使用 VS2010 进行 WP7 开发工作。

感谢任何帮助!

【问题讨论】:

  • 由于 big5 是一个双字节字符集,您一次需要两个字节才能获得正确的字符。根据您的示例,您似乎只读取一个字节。
  • 谢谢。我试图获取第一个字节以查看前导字节是否在范围内。但值不是 B5 或 E1。
  • 我猜 "String s = reader.Value;", s 已经被修改了。所以我读出的字节是错误的。如果字符串中的字符是ASCII码,则显示ok。

标签: c# xml windows-phone-7 unicode big5


【解决方案1】:

编码定义如何将字节流转换为 .Net 字符串。由于您无法应用 BIG5 编码,.Net 将选择默认编码或 XML 文件中给定的编码。

结果是,当您解析 XmlReader 时,翻译 bytes=>string 已经发生,并且 foreach(byte in string) 迭代了错误翻译字符串的 .Net 表示。

我没有使用 API 的这些部分,但似乎 XmlReader methods mentioned here 是在 XML 节点后面检索原始字节流的部分。

【讨论】:

  • 嗨,谢谢。您提到的方法(CanReadBinaryContent)在 WP 包中不支持。尝试添加该 system.xml.dll 的引用,但出现错误。
【解决方案2】:

Windows Phone SDK 不支持 BIG5 编码,但如果您需要,请继续使用Silverlight Encoding Generator 生成编码类。

【讨论】:

  • 不错的链接,但不幸的是,该工具似乎不支持双字节字符集,因此无法创建 big5 编码类。
  • 感谢您的回答。我已经尝试过该工具并遇到了同样的问题,它不支持 2bytes 编码。
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多