2012-03-30 77 views
1

我是使用WoodStox的新手。我必須讀取所有可能的Unicode字符組合並寫入XML文件。 WoodStox無法讀取某些Unicode字符。有人可以幫助我如何跳過遇到的字符或一些解決方案來編寫XML文件中的Unicode字符。Woodstox解析器不支持某些Unicode字符

例外我得到的是 錯誤在第1行的列24364002數據 - 組 - results.xml的1404735: SXXP0003:由XML解析器報告錯誤:參考字符「& #xfffe」是一個無效的XML字符。 異常是:net.sf.saxon.trans.XPathException:org.xml.sax.SAXParseException:字符引用「&#xfffe」是一個無效的XML字符。

回答

1

我對WoodStox也不熟悉,但我可以說FFFE確實不是一個有效的Unicode字符,所以它可能比解析器更有問題。一些編碼器以UTF-16編碼最常用FFFE來指示字節順序(小或大端)。取決於它被讀回爲FFFE還是FEFF,解碼器知道選擇哪個字節順序。但它不是一個標準,並不是所有解碼器都支持它。

當這樣使用時,它總是文件的前兩個字節。

所以,你需要檢查的是:

  • 您是否使用了正確的字符編碼(通常是UTF-8或UTF-16)?
  • 如果使用UTF-16,您的文件是否以FFFE或FFEF開頭?
  • WoodStox有一個設置可以自動檢測字節順序嗎?

最糟糕的情況是,如果您的文件以FFFE或FFEF開頭,那麼只需在將文件提供給WoodStox之前將其從文件中刪除即可。確保你在WoodStox中設置了正確的字節順序。

+0

默認情況下,Woodstox會自動處理物料清單,所以只要輸入字節流('InputStream'),就應該正確處理它。偷偷摸摸的唯一方法是要麼具有雙BOM,要麼手動構建一個將BOM解碼爲字符的「Reader」 - 一旦具有該值的「char」,它就不會是BOM。 – StaxMan 2012-05-03 02:11:46