JAVA從UTF-8編碼文件讀取字符串時,前邊有問號的問題

    最近做Java讀取一個xml文件模板的時候,發生了一個詭異的問題。就是讀出來的字符串,調試的時候顯示是正常的,但是真正用的時候或者打印出來的時候,前邊有一個問號。?<xml>...</xml>,類似這樣。

    後來在網上搜了一下,找到這個:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4508058 對於有BOM的UTF-8編碼文件時,從jdk1.4開始就會在讀取的時候出現這個?了。而且官方明確表示won't fix,所以現在用jdk6的時候仍然存在。

    解決辦法其實就是改變文件的編碼,改成無BOM的UTF-8就OK了。

    BOM(byte order mark)是爲 UTF-16 和 UTF-32 準備的,用於標記字節序(byte order)微軟在 UTF-8 中使用 BOM 是因爲這樣可以把 UTF-8 和 ASCII 等編碼明確區分開,但這樣的文件在 Windows 之外的操作系統裏會帶來問題。「UTF-8」和「帶 BOM 的 UTF-8」的區別就是有沒有 BOM。即文件開頭有沒有 U+FEFF。

    比如在editplus裏可以選這個:

   

    選擇存爲UTF-8即可,UTF-8即爲無BOM

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章