SAX XML解析器的缺失行号
问题描述:
我收到有关UTF-8的XML解析例外,这就是消息:SAX XML解析器的缺失行号
Invalid byte 2 of 4-byte UTF-8 sequence.
[Feb 23 13:19:01.937 PST 2015][main][SEVERE][com.accelovation.nlp.util.xml.XMLUtil$XMLDocument:<init>] SAX Exceptoin :org.xml.sax.SAXParseException;
我试图调试,但它需要修改编译器选项生成行号属性。我不能设置一个破发点和Eclipse提醒我:
Unable to install breakpoint in org.apache.exerces.jaxp.DocumentBuiderImpl due to missing line number attributes. Modify compiler options to generate line number attributes.
我应该如何修改编译器选项生成的数字?在我的Eclipse编译器选项中,我已经选中了“将行号添加到生成的类文件”。
添加的XML文件是如何解析,其中参数是传递给这个函数的File对象的详细信息:
Document document = null;
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
if (resolver != null) {
docBuilder.setEntityResolver(resolver);
}
document = docBuilder.parse(file);
答
是很困难的编码错误生成准确的行号,因为如果该文件是错误地编码,然后检测行边界是不可靠的。我不认为用Eclipse在调试模式下运行Xerces会帮助你很多。
我听说过说emacs对编码错误的诊断很好。尝试在emacs中打开文件并查看它说的是什么。或者,这个错误的最常见原因是该文件实际上是在iso-8859-1而不是utf-8中编码的;所以请尝试更改XML声明并查看是否有效。
我的xml没有声明。它曾经工作。现在我试着明确地将这部分添加到xml文件中,并尝试使用“UTF-8”和ISO-8859-1,并且出现同样的错误。 – ling 2015-02-24 00:13:12
当你将编码声明为ISO-8859-1时,你是否说错误“4字节UTF-8序列的无效字节2”?如果是这样的话,那么你需要仔细看看这个文件是否包含错误,或者它是否来自其他地方。 – 2015-02-24 09:20:05
想想吧,你还没有告诉我们你是如何解析文件的。也许你正在创建一个Java Reader而不是InputStream,所以字节到字符的解码是由Java I/O库完成的,当然这不是看XML声明。 – 2015-02-24 09:22:51