utf 8與utf 16的區別

2021-10-19 10:23:26 字數 927 閱讀 4195

用utf-16表示"漢"

假如用utf-16表示的話就是01101100 01001001(共16 bit,兩個位元組).程式解析的時候知道是utf-16就把兩個位元組當成乙個單元來解析.這個很簡單.

用utf-8表示"漢"

用utf-8就有複雜點.因為此時程式是把乙個位元組乙個位元組的來讀取,然後再根據位元組中開頭的bit標誌來識別是該把1個還是兩個或三個位元組做為乙個單元來處理.

0******x,如果是這樣的01串,也就是以0開頭後面是啥就不用管了xx代表任意bit.就表示把乙個位元組做為乙個單元.就跟ascii完全一樣.

110***xx 10******.如果是這樣的格式,則把兩個位元組當乙個單元

1110***x 10****** 10****** 如果是這種格式則是三個位元組當乙個單元.

這是約定的規則.你用utf-8來表示時必須遵守這樣的規則.我們知道utf-16不需要用啥字元來做標誌,所以兩位元組也就是2的16次能表示65536個字元.

而utf-8由於裡面有額外的標誌資訊,所有乙個位元組只能表示2的7次方128個字元,兩個位元組只能表示2的11次方2048個字元.而三個位元組能表示2的16次方,65536個字元.

由於"漢"的編碼27721大於2048了所有兩個位元組還不夠,只能用三個位元組來表示.

所有要用1110***x 10****** 10******這種格式.把27721對應的二進位制從左到右填充***符號(實際上不一定從左到右,也可以從右到左,這是涉及到另外乙個問題.等會說.

剛說到填充方式可以不一樣,於是就出現了big-endian,little-endian的術語.big-endian就是從左到右,little-endian是從右到左.

由上面我們可以看出utf-8需要判斷每個位元組中的開頭標誌資訊,所以如果一當某個位元組在傳送過程**錯了,就會導致後面的位元組也會解析出錯.而utf-16不會判斷開頭標誌,即使錯也只會錯乙個字元,所以容錯能力強.

utf 8與utf 8無BOM的區別

utf 8 8 bit unicode transformation format 是一種針對unicode的可變長度字元編碼,又稱萬國碼。bom byte order mark,位元組序標記 utf 8不需要bom來表明位元組順序,但可以用bom來表明編碼方式。字元 zero width no b...

utf 8與utf 8 無BOM 的區別

bom byte order mark utf 8 bom又叫 utf 8 簽名,其實 utf 8 的bom對uft 8沒有作用,是為了支援utf 16,utf 32才加上的bom,bom簽名的意思就是告訴編輯器當前檔案採用何種編碼,方便編輯器識別,但是bom雖然在編輯器中不顯示,但是會產生輸出,就...

utf 8 和 utf8的區別小記

utf 8 是標準寫法,php 在 windows 下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程式都能識別,但也有例外 如下文 為了嚴格一點,最好用標準的大寫 utf 8 在資料庫中只能使用 utf8 mysql 在mysql的命令模式中...