我正在寻找有关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/

10-08 22:23