3

我正在寻找解释为什么当我的 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?

4

1 回答 1

7

我怀疑您的文档实际上并不是声明的编码。这一行:

InputSource inputSource = new InputSource(new InputStreamReader(in));

将使用平台默认编码将二进制数据转换为InputStreamReader. XML 解析器不再执行此操作 - 它无法查看原始字节。

如果这有效,那么您的 XML 文件可能会被巧妙地破坏——它可能会声明它是 UTF-8 格式,但使用的是平台默认编码(例如 Windows-1252)。如果您有任何选择,您应该修复 XML,而不是使用解决方法。

于 2012-07-09T15:01:35.330 回答