UTF-8编码规则

来源:互联网 发布:mac 编译安装php7.1 编辑:程序博客网 时间:2024/06/04 01:24

UTF-8是Unicode编码规范的一种实现。依据网上的资料来阅读其编码规则,感觉甚难读懂,只能慢慢体会。下面仅介绍一点自己的领悟。

UTF-8中每个字符所占的字节数是不定的,从1到4个字节都可能。

解析字节时所用的规则:

0xxxxxxx,如果是这样的01串,也就是以0开头后面是啥就不用管了XX代表任意bit.就表示把一个字节做为一个单元.就跟ASCII完全一样.

110xxxxx 10xxxxxx.如果是这样的格式,则把两个字节当一个单元

1110xxxx 10xxxxxx 10xxxxxx 如果是这种格式则是三个字节当一个单元.

百度百科上说:

Unicode转换为UTF-8需要的字节数可以根据这个规则计算:如果Unicode小于0X80(Ascii字符),则转换后为1个字节。否则转换后的字节数为Unicode二进制位数减1再除以5。
首先,考虑一下ASCII码中的字符,也就是0--127之间的字符,很显然,一个字节就够了,而且最高位一定是0,这时用UTF-8表示,就是用一个字节,跟ASCII码的二进制表示一模一样。所以UTF-8是兼容ASCII码的。那从128往后的字符呢?先看个比较小的字符,就拿128举例,二进制形式是1000 0000,一个字节也是够的,完全没有问题,但是,再大些呢,比如281,一个字节不够了,需要两个字节,即0000 0001,0001 1001,那么UTF-8可以用两个字节直接这样表示吗?显然不可以,因为当读到第一个字节时,怎么能知道这是一个ASCII码中的1呢还是281的高位字节呢?再比如,更大些的数字1001 0001,1100 0011,到底第一个字节是一个ASCII字符呢还是一个比较大的字符的高位字节呢?也就是高位是1的话就会引起歧义,那么当字符大于127时就必须用两个字节来表示了,原本放在最高位的1就该挪到高位字节里去了,而高位置1就用来表示“我是大数字的高位字节”,几个1连续,就表示连续几个字节代表一个符号,例如11100000,10010110,1001 0011就表示这三个字节一起合起来代表一个字符。


原创粉丝点击