UTF-8 with BOM v.s. without BOM
「UTF-8」和「帶BOM的UTF-8」的區別就是有沒有BOM。即文件開頭有沒有U+FEFF。
UTF-8不需要BOM,儘管Unicode標準允許在UTF-8中使用BOM。所以不含BOM的UTF-8才是標準形式,在UTF-8文件中放置BOM主要是微軟的壞習慣(順便提一下:把帶有BOM的小端序UTF-16稱作「Unicode」而又不詳細說明也是微軟的壞習慣)。
BOM(byte order mark)是為UTF-16和UTF-32準備的,用於標記字節序(byte order)。微軟在UTF-8中使用BOM是因為這樣可以把UTF-8和ASCII等編碼明確區分開,但這樣的文件在Windows之外的操作系統中會帶來問題。
UTF-8的網頁代碼不應使用BOM,否則常常會造成<head>嵌套錯誤(指<head>內的信息會被瀏覽器理解為在<body>內),這是因為整個HTML文檔的最開頭多了一個看不見的U+FEFF(就在「<!DOCTYPE」前面),它污染了HTML。
UTF-8不需要BOM,儘管Unicode標準允許在UTF-8中使用BOM。所以不含BOM的UTF-8才是標準形式,在UTF-8文件中放置BOM主要是微軟的壞習慣(順便提一下:把帶有BOM的小端序UTF-16稱作「Unicode」而又不詳細說明也是微軟的壞習慣)。
BOM(byte order mark)是為UTF-16和UTF-32準備的,用於標記字節序(byte order)。微軟在UTF-8中使用BOM是因為這樣可以把UTF-8和ASCII等編碼明確區分開,但這樣的文件在Windows之外的操作系統中會帶來問題。
UTF-8的網頁代碼不應使用BOM,否則常常會造成<head>嵌套錯誤(指<head>內的信息會被瀏覽器理解為在<body>內),這是因為整個HTML文檔的最開頭多了一個看不見的U+FEFF(就在「<!DOCTYPE」前面),它污染了HTML。
<< Home