java + xml:库处理来自 的编码标题?
我已经习惯使用 直到现在才发生,其他编码可能存在一些微妙之处使用标准 Java XML 库(SAX、DOM、STaX)...
在读取 XML 文档时,这些库是否自动处理标头中的 encoding
属性?如果是这样,这在哪里记录? (它不在 DocumentBuilder 中或 DocumentBuilderFactory)如果不是,我该怎么做才能使其适用于不同的编码?
I'm so used to using <?xml version="1.0" encoding="UTF-8"?>
that it didn't occur until now that there might be some subtleties with other encodings using the standard Java XML libraries (SAX, DOM, STaX)...
Do these libraries automatically handle the encoding
attribute in the header when reading XML documents? If so, where is this documented? (It's not in DocumentBuilder or DocumentBuilderFactory) If not, what do I have to do to make it work out OK for different encodings?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
DocumentBuilder
使用 SAX API 将文档提供给实现进行解析(尽管该实现实际上可能不使用 SAX 解析器),以及 SAX 的org.xml.sax.InputSource< 的 Javadoc /code> 说明了它对标头的作用。
因此有趣的情况可能包括通过 HTTP 提供的 XML 流,其 HTTP Content-Type 标头与 XML 的编码声明冲突。
DocumentBuilder
uses the SAX API to provide the document to the implementation for parsing (though the implementation might not actually use a SAX parser), and the Javadoc for SAX'sorg.xml.sax.InputSource
says what it does with the header.So interesting cases could include an XML stream supplied via HTTP, with an HTTP Content-Type header that conflicts with the XML's encoding declaration.
对于JAXB (JSR-222),您可以使用
Marshaller.JAXB_ENCODING
标志来指定编码:如果您要编组到
java.io.Writer
,您需要确保您已将编写器构造为适当的编码:有关 JAXB 和编码的更多信息
For JAXB (JSR-222) you can use the
Marshaller.JAXB_ENCODING
flag to specify an encoding:If you are marshalling to a
java.io.Writer
you will need to ensure that you have constructed the writer to be of the appropriate encoding:For More Information on JAXB and Encoding