關於UTF-8

記得剛畢業那會兒筆試有一個題目大概是這樣的:

填寫一個漢字的各個編碼的字節數和位數:

編碼格式 佔字節數 所佔位數
GBK    
UTF-8    

當時毫不憂慮的寫了GBK:2字節16位 ,UTF-8:3字節24位。而且在相當的一段時間裏,還覺得自己是對的,而且百度也覺得這是對,哎,無知真可怕啊!

我們都知道assic碼用的是一字節,卻只用了7位,最高位永遠爲0,其編碼範圍是:00000000 ~ 01111111。雖然後來IBM做了下擴充,使用了8位,不過貌似沒什麼人承認額!說到這裏,答案就很明顯了,一個UTF-8的漢字顯然用了3字節,但一定不是24位。

UTF-8是UNICODE的一種變長字符編碼又稱萬國碼(就是可以表示所有國家的文字的編碼,名字大氣啊!),其長度爲1字節~6字節。漢字的UTF-8編碼則是3個字節表示。UTF-8用其第一個字節的前幾位來標示其編碼寬度,具體規則如下:

1、第一字節的最高位爲0,則爲1字節寬度

2、第一字節的最高3爲110,則爲2字節寬度

3、第一字節的最高4位爲1110,則爲3字節寬度

4、第一字節的最高5位爲11110,則爲4字節寬度

5、第一字節的最高6位爲111110,則爲5字節寬度

6、第一字節的最高7位爲1111110,則爲6字節寬度

對於多字節寬度,其於後幾位最高兩位必須爲:10

因此:

UTF-8編碼
字節(bytes) 位(bits)

 

表示

1 7 0XXXXXX
2 11 110XXXXX 10XXXXXX
3 16 1110XXXX 10XXXXXX 10XXXXXX
4 21 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
5 26 111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX
6 31

1111110X 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX

 

 

 

正確的答案應該是一個漢字用UTF-8表示用了3位16bit,所以不要小看任何一個面試的題目,說不定背後就有玄機!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章