我正在寻求解释,当我的 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?
最佳答案
我怀疑您的文档不是真的您声明的编码。这一行:
InputSource inputSource = new InputSource(new InputStreamReader(in));
将使用平台默认 编码将二进制数据转换为 InputStreamReader
中的文本。 XML 解析器不再执行此操作 - 它看不到原始字节。
如果这有效,则您的 XML 文件可能会被巧妙地破坏 - 它可能声明它是 UTF-8,但使用平台默认编码(例如 Windows-1252)。如果您有任何选择,您应该修复 XML 而不是使用变通方法。
关于java - 为什么在文件包含特殊 UTF-8 字符时使用 InputSource 修复 SAX 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397678/