使用 javax.xml.stream.XMLStreamReader 时如何启用非 IANA 编码
Posted
技术标签:
【中文标题】使用 javax.xml.stream.XMLStreamReader 时如何启用非 IANA 编码【英文标题】:How to enable non-IANA encodings when using javax.xml.stream.XMLStreamReader 【发布时间】:2018-11-17 22:21:49 【问题描述】:我正在使用javax.xml.stream.XMLStreamReader
来解析 XML 文档。不幸的是,我正在解析的一些文档使用非 IANA 编码名称,例如“macroman”和“ms-ansi”。例如:
<?xml version="1.0" encoding="macroman"?>
<foo />
这会导致解析崩溃并出现异常:
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,42]
Message: Invalid encoding name "macroman".
有什么方法可以为我的XMLStreamReader
提供自定义编码处理程序,以便我可以通过支持我需要的编码来增加它??
【问题讨论】:
我假设您没有能力更改流以使其不包含编码行? XMLStreamReader 有其局限性,这就是其中之一。 很遗憾,但您最好选择不同的 XML 库。 @Dylan 我没有生成这些文档,只是使用它们,所以很遗憾我无法控制编码行。还有其他更灵活的 XML 库吗? 【参考方案1】:您可以使用转换器包装输入流,该转换器将非标准字符集替换为 XMLStreamReader
可以理解的等效字符集。
见Filter (search and replace) array of bytes in an InputStream
【讨论】:
以上是关于使用 javax.xml.stream.XMLStreamReader 时如何启用非 IANA 编码的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)