关于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,所以不要小看任何一个面试的题目,说不定背后就有玄机!

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