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.這樣做會清除爲什麼角色不會被刪除,但我不相信這是預期的行爲。
任何人都可以照亮它爲什麼這樣做,或者說如何解決它? 謝謝:)