關於BOM的知識

2021-06-15 05:01:07 字數 1516 閱讀 4333

utf的位元組序和bom

utf-8以位元組為編碼單元,沒有位元組序的問題。utf-16以兩個位元組為編碼單元,在解釋乙個utf-16文字前,首先要弄清楚每個編碼單元的位元組序。例如收到乙個「奎」的unicode編碼是594e,「乙」的unicode編碼是4e59。如果我們收到utf-16位元組流「594e」,那麼這是「奎」還是「乙」?

unicode規範中推薦的標記位元組順序的方法是bom。bom不是「bill of material」的bom表,而是byte order mark。bom是乙個有點小聰明的想法:在ucs編碼中有乙個叫做"zero width no-break space"的字元,它的編碼是feff。而fffe在ucs中是不存在的字元,所以不應該出現在實際傳輸中。ucs規範建議我們在傳輸位元組流前,先傳輸字元"zero width no-break space"。

這樣如果接收者收到feff,就表明這個位元組流是big-endian的;如果收到fffe,就表明這個位元組流是little-endian的。因此字元"zero width no-break space"又被稱作bom。

utf-8不需要bom來表明位元組順序,但可以用bom來表明編碼方式。字元"zero width no-break space"的utf-8編碼是ef bb bf。所以如果接收者收到以ef bb bf開頭的位元組流,就知道這是utf-8編碼了。

windows就是使用bom來標記文字檔案的編碼方式的。

單純的文字檔案的編碼識別﹐讀取與寫入

notepad預設有四種編碼來儲存和讀取文字檔案。分別是﹕

ansi,unicode,unicode-big-endian和utf-8。

ansi是windows作業系統在區域與語言塊設定的編碼(也就是系統預設的編碼)﹐因此像繁體作業系統就是big5,而簡體作業系統則是gbk。

而unicode和utf-8這兩種格式相信大家已經有所了解(當然前者是unicode-16)

而unicode-big-endian是什麼意思呢﹐它與unicode幾乎一樣﹐只是它把高位放在前面(而後者則剛好相反)

如同樣是字元"a"﹐在以下幾種格式中的儲存形式分別是﹕

utf-16 big-endian : 00 41 

utf-16 little-endian : 41 00

utf-32 big-endian : 00 00 00 41 

utf-32 little-endian : 41 00 00 00

根據bom的規則﹐因此在一段位元組流開始時﹐如果接收到以下位元組﹐則分別表明了該文字檔案的編碼。

utf-8: ef bb bf 

utf-16 : ff fe 

utf-16 big-endian: fe ff 

utf-32 little-endian: ff fe 00 00

utf-32 big-endian: 00 00 fe ff 

而如果不是以這個開頭﹐那程式則會以ansi,也就是系統預設編碼讀取。

js中 關於bom的知識

1 screentop 瀏覽器左上角到物理螢幕左上角的垂直距離 2 screenleft 瀏覽器左上角到物理螢幕左上角的水平距離 3 以上兩種 除了火狐瀏覽器不相容外,其他瀏覽器都相容,火狐瀏覽器使用screenx和screeny,其功能和上面兩種一樣 處理相容性問題 browerleft wind...

BOM知識總結

什麼是bom bom 是browser object model 瀏覽器物件模型 的縮寫,提供與瀏覽器視窗進行互動的物件。window物件是bom的核心,是最頂層的物件,所有物件都是通過它延伸出來的。全域性作用域 1.定義在全域性環境下的變數都會成為window物件的屬性。2.把變數定義在函式體裡,...

關於BOM的那些事兒

window物件 1.window物件是最頂層的物件 2.window物件有六大屬性,這六大屬性本身也是物件 3.window物件旗下的document也是物件 並且document旗下有五大屬性 4.document旗下的五大屬性又是物件,總結 都是物件 window screenleft 和 s...