2012-03-26 33 views
2

在Java錯誤數據庫http://bugs.sun.com/view_bug.do?bug_id=4508058的頁面上,它顯示Sun/Oracle不會解決Java不解析UTF-8編碼字符串的BOM的問題。由於本頁最新的評論可以追溯到2010年,我想知道是否有關於此的更新信息? Java不能處理UTF-8的BOM嗎?Java:UTF-8和BOM

+1

我不同意你是如何說明這個問題的,但是:對於UTF-8,Java編碼器和解碼器當然不會考慮多餘的BOM。 UTF-8上的BOM確實是一個壞消息,並且會破壞各種各樣的事情。請不要使用它們;如果您發現自己需要指定文件編碼,則可以使用更高級別的協議,例如MIME頭文件,嵌入式聲明或以任何編程語言發表評論,或通過慣用文件擴展名「.utf8」。 – tchrist 2012-03-26 16:59:38

+2

我同意你的意見。但是,如果您想要創建一個用戶可以直接在Excel中打開的UTF-8 csv文件,則無法繞過BOM。如果您不使用物料清單,它會將其作爲ANSI文件讀取。 (微軟應該被控制所有的開發時間,他們的BOM花費了世界) – dstibbe 2012-06-08 13:51:17

回答

3

是的,Java不能處理UTF8編碼文件中的BOM。解析用於數據格式化目的的多個XML文件時遇到此問題。既然你不知道什麼時候可能碰到它們,如果你在運行時發現它,或者按照tchrist給出的建議,我會建議剝離BOM標記。

+0

如果你對如何做到這一點感到茫然:一個快速的方法是'if(text.codePointAt(0)== 0xfeff)text = text.substring(1,text.length());'(這也會捕獲UTF-8 BOM EF BB BF)。更詳細的方法描述如下:http://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java/1835529#1835529 – user149408 2015-05-24 14:21:53