我们的一个提供商有时会发送标记为 UTF-8 编码文档但包含未包含在 UTF-8 字符集中的字符的 XML 提要。这会导致解析器在遇到这些字符时抛出异常并停止构建 DOM 对象:
DocumentBuilder.parse(ByteArrayInputStream bais)
抛出以下异常:
org.xml.sax.SAXParseException: Invalid byte 2 of 2-byte UTF-8 sequence.
有没有办法及早“捕获”这些问题并避免异常(即从流中查找和删除这些字符)?我正在寻找的是针对错误编码文档的“尽力而为”类型的回退。正确的解决方案显然是从源头上解决问题并确保只交付正确的文档,但如果无法做到这一点,什么是好的方法呢?
最佳答案
如果问题确实是错误的编码(而不是混合编码),您不需要重新编码文档来解析它。只需将其解析为 Reader 而不是 InputStream,dom 解析器将忽略 header :
DocumentBuilder.parse(new InpputSource(new InputStreamReader(inputStream, "<real encoding>")));
关于java - 修复 XML 文件中的错误编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216890/