如何在使用 javax.xml.stream.XMLStreamReader 时启用非 IANA 编码

How to enable non-IANA encodings when using javax.xml.stream.XMLStreamReader

提问人:Laurence Gonsalves 提问时间:6/8/2018 更新时间:3/18/2019 访问量:110

问:

我用来解析 XML 文档。不幸的是,我正在解析的一些文档使用非 IANA 编码名称,例如“macroman”和“ms-ansi”。例如:javax.xml.stream.XMLStreamReader

<?xml version="1.0" encoding="macroman"?>
<foo />

这会导致解析爆炸并出现异常:

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,42]
Message: Invalid encoding name "macroman".

有没有办法为我提供自定义编码处理程序,以便我可以通过支持我需要的编码来增强它?XMLStreamReader

Java XML 解析 stax

评论

0赞 Dylan 3/15/2019
我假设您没有能力更改流以使其不包含编码行?XMLStreamReader 有其局限性,这是其中之一。
0赞 Dylan 3/15/2019
这很不幸,但选择不同的 XML 库可能会更好地为您服务。
0赞 Laurence Gonsalves 3/16/2019
@Dylan我不是在生成这些文档,只是在使用它们,所以不幸的是,我无法控制编码行。是否有其他更灵活的 XML 库?

答:

0赞 Rich 3/18/2019 #1

您可以使用转换器包装输入流,该转换器将非标准字符集替换为可以理解的等效字符集。XMLStreamReader

请参阅筛选(搜索和替换)InputStream 中的字节数组