问题描述
我的项目使用 JAXB 解析来自各种来源的 XML。这适用于大多数来源,但我无法解析来自一个特定来源的文档。我能找到的唯一区别是,违规文档报告其编码为 UTF-16,而据我所知,其他文档则为 UTF-8。
代码如下:
InputStream inputStream = new FileInputStream(inputFile);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(inputStream);
这会引发以下异常:
[Fatal Error] :1:40: Content is not allowed in prolog.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 40; Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at ... (my code)
违规文档以
开头<?xml version="1.0" encoding="UTF-16"?>
直接跟在根元素的开始标记之后。我用十六进制编辑器检查了文件;在开始标记之前没有其他字符(甚至没有 BOM 或任何非打印字符)。
如果我将 encoding
属性更改为 UTF-8
,代码会运行超过该点(尽管它会在更进一步的地方抛出一个无关的异常)。
JAXB 是否与 UTF-16 不兼容?或者还有什么问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)