UTF-16编码

4
<?xml version="1.0" encoding="UTF-16"?>
    <note>
        <from>Jani</from>
        <to>ALOK</to>
        <message>AshuTosh</message>
    </note>

我有一个仅支持UTF-8编码的XML解析器,否则会出现SAX解析器异常。我该如何将UTF-16转换为UTF-8?


你的解析器支持UTF-18的概率是100%。请告诉我们解析器的名称、版本和错误消息以获得帮助。 - Aaron Digulla
@AaronDigulla 感谢您的关注,我已经通过Jörn Horstmann提供的答案解决了问题......无论如何,解析器的名称是com.sun.xml.fastinfoset.dom.DOMDocumentParser。 - Alok Chaudhary
该解析器绝对支持UTF-16。确保您的文档是正确的UTF-16,并使用正确的API。 - Aaron Digulla
@Maksud_Tiger:请回馈社区并接受答案。 - home
1个回答

5
在这种情况下,您使用的不是XML解析器,请参见xml规范第2.2节

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

Java XML解析器通常使用包装在InputSource对象中的输入。这可以使用带有执行给定字符集的字符解码的Reader参数构造。
InputStream in = ...
InputSource is = new InputSource(new InputStreamReader(in, "utf-16"));

对于“utf-16”字符集,如果流不以字节顺序标记开头,则应使用“utf-16le”或“utf-16be”。

解析器应该读取XML头部(其中包含编码)并使用上述规则正确处理文档。在读取XML时,您不应该自己定义编码,因为如果有人使用不同的编码发送给您,那么这种方式将会出错。 - Aaron Digulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接