|
|
|
|
|
現(xiàn)在各種各樣的編輯器,保存文件時(shí)如何選擇編碼格式,也是一大問題,如果選擇不對(duì),那么可能對(duì)程序的運(yùn)行就會(huì)產(chǎn)生影響。
我在用Wordpress時(shí)修改文件后發(fā)生過很多次這樣的事情,用記事本編輯的文件能運(yùn)行正常,但改用EditPlus編輯后就運(yùn)行出錯(cuò),這明顯就是保存的文件編碼問題了。
后來經(jīng)常多次變換保存方式,才知道,EditPlus保存選utf-8 bom就是文本文件保存時(shí)的utf-8。EditPlus保存選utf-8并不是文本文件保存時(shí)的utf-8。
這就讓我有些好奇了,utf-8 bom 與 utf-8 有什么不同?后來經(jīng)過查閱相關(guān)資料,才明白它們之間的區(qū)別。
先看圖
內(nèi)容都一樣 ,為什么相差了3個(gè)字節(jié)呢 ? 再看下圖 。
多出來的 ef bb bf 就是上面相差三個(gè)字節(jié)的原因 。
BOM——Byte Order Mark,就是字節(jié)序標(biāo)記。
bom是為utf-16和utf-32準(zhǔn)備的,用于標(biāo)記字節(jié)順序。微軟在utf-8中使用bom是因?yàn)檫@樣可以把UTF-8和ASCII等編碼區(qū)分開來,Windows就是使用BOM來標(biāo)記文本文件的編碼方式的,但這樣的文件在Windows之外的操作系統(tǒng)里會(huì)帶來問題。
UTF-8以字節(jié)為編碼單元因此不需要 BOM 來表明字節(jié)順序,但可以用 BOM 來表明編碼方式。字符 "Zero Width No-Break Space" 的 UTF-8 編碼是 EF BB BF。所以如果接收者收到以 EF BB BF 開頭的字節(jié)流,就知道這是 UTF-8編碼了。
因此UTF-8編碼的字符串開頭處的三個(gè)bytes 0xef,0xbb,0xbf就稱為UTF-8 BOM頭。
前面說了那么多,想必大家也就大致了解了有關(guān)utf-8 bom與utf-8的關(guān)系了吧,也就明白了為什么EditPlus保存選utf-8 bom就是文本文件保存時(shí)的utf-8了。