2012-12-14 61 views
4

我想解析包含希伯來字符的XML文件。 我知道該文件是正確的,因爲如果我輸出文件(來自不同的軟件)沒有希伯來字符,它解析得很好。MalformedByteSequenceException:1字節UTF-8序列的無效字節1。當使用希伯來字符

我試過很多東西,但我總是得到這個錯誤

MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. 

我最新的嘗試是使用FileInputStream打開它,並指定編碼

DocumentBuilder db = dbf.newDocumentBuilder(); 
document = db.parse(new FileInputStream(new File(xmlFileName)), "Cp1252"); 

Cp1252是,工作編碼我在一個不同的應用程序) 但我得到了同樣的結果。

嘗試使用ByteArray以及,沒有任何工作。

有什麼建議嗎?

+0

如何在文件編碼?你用什麼來解析它? – Joni

+0

我不太確定該文件的編碼是什麼。它缺少第一行中的編碼部分..我使用內置於DocumentBuilder.parse –

+0

中的java解析的第二個參數是系統標識,而不是字符編碼。 – jtahlborn

回答

6

,如果你知道文件的正確的編碼,它不是「UTF-8」,那麼你就可以將其添加到XML頭:

<?xml version="1.0" encoding="[correct encoding here]" ?> 

或解析它作爲一個讀者:

db.parse(new InputStreamReader(new FileInputStream(new File(xmlFileName)), "[correct encoding here]")); 
+0

我最終這樣做了。其實我做了他們兩個,它的工作原理。 謝謝! –

0

解決方案非常簡單,獲取UTF-8格式的內容,並覆蓋SAX輸入源。

File file = new File("c:\\file-utf.xml"); 
InputStream inputStream= new FileInputStream(file); 
Reader reader = new InputStreamReader(inputStream,"UTF-8"); 

InputSource is = new InputSource(reader); 
// is.setEncoding("UTF-8"); -> This line causes error! Content is not allowed in prolog 

saxParser.parse(is, handler); 

你可以在這裏閱讀完整的例子 - http://www.mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/

相關問題