Alex

Android software development engineer

Welcome to my web site


Unicode编码

目录

Unicode编码

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。

Unicode用数字0x000000-0x10FFFF来映射字符,最多可以容纳1114112个字符。UTF-8、UTF-16、UTF-32都是将数字转换为程序数据的实现方案。

Unicode计划使用17个平面,每个平面有2^16=65536个码位,一共有17*65536=1114112个码位。

Unicode 5.0.0版本中,已经定义的码位有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。

平面15和平面16只是定义了两个各占65534个码位的专用区,分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域。

平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。

平面0的0xD800-0xDFFF,共2048个码位,被称作代理区。代理区的目的是用两个UTF-16字符表示BMP以外的字符。UTF-16编码时会介绍。

Unicode 5.0.0版本中,238605-65534*2-6400-2408=99089。余下的99089个已定义码位分布在平面0、平面1、平面2和平面14上,它们对应着Unicode定义的99089个字符,其中包括71226个汉字。

平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。

UTF-16编码

Unicode转换为UTF-16

UTF-16转换为Unicode

UTF-8编码

UTF-8是一种变长字节编码方式。

对于一个字符的UTF-8编码,如果只有一个字节,则其最高二进制位为0;如果是多个字节,第一个字节从最高位开始连续的二进制位值为1的个数决定了其编码的字节数,后续字节均以10开头。UTF-8编码最多可使用到6个字节进行编码。

字节数 编码格式 UTF-8 Unicode
1字节 0xxxxxxx 0x00~0x7F U+0000~U+007F
2字节 110xxxxx 10xxxxxx 0xC2~0xDF
0x80~0xBF
U+0080~U+07FF
3字节 1110xxxx 10xxxxxx 10xxxxxx 0xE0
0xA0~0xBF
0x80~0xBF

0xE1~0xEC
0x80-0xBF
0x80-0xBF

0xED
0x80~0x9F0
0x80-0xBF

0xEE~0xEF
0x80-0xBF
0x80-0xBF
U+0800~U+FFFF
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0xF0
0x90~0xBF
0x80-0xBF
0x80-0xBF

0xF1-0xF3
0x80-0xBF
0x80-0xBF
0x80-0xBF

0xF4
0x80-0x8F
0x80-0xBF
0x80-0xBF
U+10000~U+10FFFF
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 未定义 未定义
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 未定义 未定义

UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。这些x表示的位与Unicode编码是一一对应的,位高低的顺序也是相同的。

当前Unicode编码只定义了21位,所以,5字节和6字节处于未定义状态。

Unicode转换为UTF-8

UTF-8转换为Unicode

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦