2015-02-23 87 views
0

我收到有关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); 

回答

1

是很困难的编码错误生成准确的行号,因为如果该文件是错误地编码,然后检测行边界是不可靠的。我不认为用Eclipse在调试模式下运行Xerces会帮助你很多。

我听说过说emacs对编码错误的诊断很好。尝试在emacs中打开文件并查看它说的是什么。或者,这个错误的最常见原因是该文件实际上是在iso-8859-1而不是utf-8中编码的;所以请尝试更改XML声明并查看是否有效。

+0

我的xml没有<?xml version =“1.0”encoding =“UTF-8”?>声明。它曾经工作。现在我试着明确地将这部分添加到xml文件中,并尝试使用“UTF-8”和ISO-8859-1,并且出现同样的错误。 – ling 2015-02-24 00:13:12

+0

当你将编码声明为ISO-8859-1时,你是否说错误“4字节UTF-8序列的无效字节2”?如果是这样的话,那么你需要仔细看看这个文件是否包含错误,或者它是否来自其他地方。 – 2015-02-24 09:20:05

+0

想想吧,你还没有告诉我们你是如何解析文件的。也许你正在创建一个Java Reader而不是InputStream,所以字节到字符的解码是由Java I/O库完成的,当然这不是看XML声明。 – 2015-02-24 09:22:51