UTF-8與BOM

BOM —— Byte Order Mark中文名譯做「字節順序標記」。html

它是一個Unicode字符,它的編碼是 FE FF,而 FF FE 在 UCS 中是不存在的字符,因此不該該出如今實際傳輸中,一般出如今文本的開頭,用來標識字節序(Big/Little Endian),除此之外還能夠標識編碼(UTF-8/16/32)。瀏覽器

若是出如今文本中間,則解釋爲zero width no-break space,表達零寬度非換行空格的意義,用戶看起來就是一個空格。但從Unicode3.2開始,U+FE FF只能出如今字節流的開頭,只能用於標識字節序,除此之外的用法已被捨棄。取而代之的是,使用U+20 60來表達零寬度無斷空白。編輯器

UTF-8不須要 BOM 來代表字節順序,但能夠用 BOM 來代表編碼方式。字符 "Zero Width No-Break Space" 的 UTF-8 編碼是 EF BB BF。因此若是接收者收到以 EF BB BF 開頭的字節流,就知道這是 UTF-8編碼了。Windows 就是使用 BOM 來標記文本文件的編碼方式的,此僅是Windows的習慣,見UTF-8最好不要帶BOM編碼


相似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於通常的文件,這樣並不會產生什麼麻煩。但對於 PHP來講,BOM是個大麻煩。spa

PHP並不會忽略BOM,因此在讀取、包含或者引用這些文件時,會把BOM做爲該文件開頭正文的一部分。根據嵌入式語言的特色,這串字符將被直接執行(顯示)出來。由此形成即便頁面的 top padding 設置爲0,也沒法讓整個網頁緊貼瀏覽器頂部,由於在html一開頭有這3個字符呢!code


不一樣編碼的字節順序標記的表示

編碼
表示(十六進制) 表示(十進制)
UTF-8 EF BB BF 239 187 191
UTF-16(大端序) FE FF 254 255
UTF-16(小端序) FF FE 255 254
UTF-32(大端序) 00 00 FE FF 0 0 254 255
UTF-32(小端序) FF FE 00 00 255 254 0 0
UTF-7 2B 2F 76和如下的一個字節:[ 38 | 39 | 2B | 2F ] 43 47 118和如下的一個字節:[ 56 | 57 | 43 | 47 ]
en:UTF-1 F7 64 4C 247 100 76
en:UTF-EBCDIC DD 73 66 73 221 115 102 115
en:Standard Compression Scheme for Unicode 0E FE FF 14 254 255
en:BOCU-1 FB EE 28及可能跟隨着FF 251 238 40及可能跟隨着255
GB-18030 84 31 95 33 132 49 149 51
相關文章
相關標籤/搜索