使用BOM 標記讀取UTF-8:了解意外的BOM 輸出
以位元組順序讀取UTF-8 編碼的檔案時標記(BOM),有可能會遇到輸出字串中包含BOM。發生這種情況是因為 BOM(Unicode 標識符)會作為特定位元組序列儲存在檔案的開頭。
在給定的 Java 程式碼中,適當地利用 FileReader 和 BufferedReader 來處理 UTF-8 檔案讀取。但是,問題出現在後續行:
text = new String(tmp.getBytes(), "UTF-8");
此行嘗試使用 UTF-8 字元集解碼 tmp 字串中儲存的位元組。但是,String 上的 getBytes() 方法不會保留原始檔案中的 BOM 標記。因此,解碼過程會忽略 BOM,並且它實際上會丟失。
要在輸出字串中保留BOM 標記,需要對程式碼進行輕微調整:
byte[] bytes = tmp.getBytes("UTF-8"); if (isUTF8WithBOM(bytes)) { text = new String(bytes, 3, bytes.length - 3); } else { text = new String(bytes, "UTF-8"); }
isUTF8WithBOM 方法檢查位元組數組是否以UTF-8 BOM 序列(0xEF、0xBB、 0xBF)開頭。如果為 true,則透過從第三個位元組開始對位元組數組進行切片來刪除 BOM。這可確保後續解碼過程在輸出字串中包含 BOM 標記。
以上是Java讀取UTF-8檔案時如何保留BOM?的詳細內容。更多資訊請關注PHP中文網其他相關文章!