2016-03-16 83 views
1

我正在嘗試使通用方法從文件中獲取文本。相當容易,除了要求它應該放棄主要BOM字符。對於UTF-8,我得到了這個工作。我用一個正則表達式模式:從帶有UTF-16 BOM字符的文件中讀取文本

Pattern LEADING_BOM_PATTERN = Pattern.compile("^\uFEFF+"); 

Charset encoding; // This is given. 
InputStream input; // This is created. 

// Remove the leading BOM characters. 
String text = IOUtils.toString(input, encoding); 
text = LEADING_BOM_PATTERN.matcher(text).replaceFirst(""); 

現在我的問題:這完全適用於UTF-8字符BOM(EF BB BF),而不是任何其他的人的。 然而,由於它指出here

包括BOM確切字節將是任何Unicode字符U + FEFF由轉換格式轉換成。

這使我假設「\ uFEFF」字符適用於所有BOM字符。事實證明,事實並非如此。

經過一番研究後,事實證明,「FE FF」和「FF FE」BOM字符被Java讀取爲char 65533,而「\ uFEFF」字符串解析爲char 65279.這樣做會清除爲什麼角色不會被刪除,但我不相信這是預期的行爲。

任何人都可以照亮它爲什麼這樣做,或者說如何解決它? 謝謝:)

回答

1

原來這只是一個非常愚蠢的錯誤。我沒有將正確的編碼傳遞給IOUtils。因此它不會返回正確的字符。當傳遞UTF-16字符集時,它工作正常。傻我...

相關問題