天天看點

文本編輯BOM标記(Byte Order Mark)

微軟的自帶記事本程式notepad.exe會給UTF-8編碼的檔案頭加入三個隐藏的位元組(即BOM)。這是一種很愚蠢的做法。就是為了讓編輯器不去猜測檔案本身是ASCII碼還是UTF-8。

什麼是BOM

BOM(byte-order mark),即位元組順序标記,它是插入到以UTF-8、UTF16或UTF-32編碼Unicode檔案開頭的特殊标記,用來識别Unicode檔案的編碼類型。對于UTF-8來說,BOM并不是必須的,因為BOM用來标記多位元組編碼檔案的編碼類型和位元組順序(big-endian或little-endian)。

在絕大多數編輯器中都看不到BOM字元,因為它們能了解Unicode,去掉了讀取器看不到的題頭資訊。若要檢視某個Unicode檔案是否以BOM開頭,可以使用十六進制編輯器。下表列出了不同編碼所對應的BOM。

BOM Encoding

EF BB BF UTF-8

FE FF UTF-16 (big-endian)

FF FE UTF-16 (little-endian)

00 00 FE FF UTF-32 (big-endian)

FF FE 00 00 UTF-32 (little-endian)

BOM的來曆

為了識别 Unicode 檔案,Microsoft 建議所有的 Unicode 檔案應該以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字元開頭。這作為一個“特征符”或“位元組順序标記(byte-order mark,BOM)”來識别檔案中使用的編碼和位元組順序。

Linux/UNIX 并沒有使用 BOM,因為它會破壞現有的 ASCII 檔案的文法約定。

不同的編輯工具對BOM的處理也各不相同。使用Windows自帶的記事本将檔案儲存為UTF-8編碼的時候,記事本會自動在檔案開頭插入BOM(雖然BOM對UTF-8來說并不是必須的),但是editplus就不會這樣做。

References:

http://blog.csdn.net/zcmssd/article/details/6086711

http://club.topsage.com/thread-2227977-1-1.html

http://en.wikipedia.org/wiki/Byte-order_mark

轉載于:https://www.cnblogs.com/foohack/p/3627553.html