【问题标题】:UTF-16 EncodingUTF-16 编码
【发布时间】:2012-03-13 19:47:41
【问题描述】:
<?xml version="1.0" encoding="UTF-16"?>
    <note>
        <from>Jani</from>
        <to>ALOK</to>
        <message>AshuTosh</message>
    </note>

我的 XML 解析器只支持 UTF-8 编码,否则它会给出 SAX 解析器异常。如何将 UTF-16 转换为 UTF-8?

【问题讨论】:

  • 您的解析器有 100% 的机会支持 UTF-18。给我们解析器的名称、版本和错误消息以提供帮助。
  • @AaronDigulla 感谢您表现出兴趣,我通过 Jörn Horstmann 提供的答案得到了问题的解决方案......无论如何,解析器的名称是 com.sun。 xml.fastinfoset.dom.DOMDocumentParser
  • 那个解析器肯定支持 UTF-16。确保 100% 确保您的文档是正确的 UTF-16 并且您使用了正确的 API。
  • @Maksud_Tiger:请回馈社区并接受答案。

标签: java xml utf-16


【解决方案1】:

在这种情况下,它不是您正在使用的 XML 解析器,请参阅 section 2.2 of the xml specification:

所有 XML 处理器必须接受 Unicode 的 UTF-8 和 UTF-16 编码

Java xml 解析器通常接收包装在InputSource 对象中的输入。这可以使用Reader 参数来构造,该参数对给定的字符集进行字符解码。

InputStream in = ...
InputSource is = new InputSource(new InputStreamReader(in, "utf-16"));

对于“utf-16”charset,流应该以字节顺序标记开头,如果不是这种情况,请使用“utf-16le”或“utf-16be”。

【讨论】:

  • :-/ 解析器应读取 XML 标头(包含编码)并使用上述规则正确处理文档。在阅读 XML 时,您永远不应该自己定义编码,因为如果有人使用不同的编码向您发送内容,那将会中断。
猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2015-01-28
  • 1970-01-01
  • 2019-02-25
  • 2012-06-30
  • 2023-03-06
相关资源
最近更新 更多