UTF-8中的BOM-带还是不带?
轉自:http://blog.csdn.net/fanpei_moukoy/article/details/21464305
UTF-8 不需要 BOM,盡管 Unicode 標準允許在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是標準形式,在 UTF-8 文件中放置 BOM 主要是微軟的習慣(順便提一下:把帶有 BOM 的小端序 UTF-16 稱作「Unicode」而又不詳細說明,這也是微軟的習慣)。
什么是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和不帶BOM的區別
「UTF-8」和「帶 BOM 的 UTF-8」的區別就是有沒有 BOM。即文件開頭有沒有 U+FEFF,也就是說有沒有這個標記。
帶還是不帶?
如果你的編程平臺需要跨平臺編譯,比如,會在linux平臺上編譯,而不是只在windows上運行,建議不帶BOM,unicode標準就是不帶,帶BOM畢竟那是微軟的那一套,帶了會出現很大的問題。反之,如果你的程序只在windows平臺上編譯出windows程序,這個可有可無。
注意:這里所說的帶還是不帶,指的是:源碼字符集(the source character set)-源碼文件是使用何種編碼保存的;
???????????現在linux平臺下的GCC 4.6及以上的版本已經可以支持帶BOM的源碼了!!!!!
?????所以之前出現的問題也可以不用沖突,帶或者不帶,以后就不會成為一個問題。
總結
以上是生活随笔為你收集整理的UTF-8中的BOM-带还是不带?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语音之特征参数提取
- 下一篇: Arrays 工具类