我希望得到一个解释,当我的XML文件中包含一些特殊的UTF-8字符时,我的SAX解析器失败的原因。
要解析XML文件,请使用Document doc = builder.parse(inputSource);
但是,当我使用inputSource
时,它可以正常工作:
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream in = new FileInputStream(file);
InputSource inputSource = new InputSource(new InputStreamReader(in));
Document doc = builder.parse(inputSource);
我不太明白为什么后者有效。我已经看到它被使用的例子,但没有解释为什么它的工作原理。 第二个是解析字符串而不是文件,因此编码将是UTF-8?
答案 0 :(得分:7)
我怀疑您的文档在您声明的编码中不是真正。这一行:
InputSource inputSource = new InputSource(new InputStreamReader(in));
将使用平台默认编码将二进制数据转换为InputStreamReader
内的文本。 XML解析器不再这样做 - 它无法看到原始字节。
如果这样做,你的XML文件可能会巧妙地破灭 - 它可能是声明它是UTF-8,但是使用平台默认编码(例如Windows-1252)。如果您有任何选择,则应该修复XML,而不是使用变通方法。