2015-02-23 86 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