unicode编码转换压缩为utf-8编码

发布时间 2023-08-07 22:50:01作者: 心灵可视化
Unicode编码也可称为万能码,它将世界上所有的符号都使用2或4个字节(即2的16/32次方)来表示,每个字符的二进制表示长度固定为16/32位,如此确实可以兼容所有的字符编码,但是4个字节的长度造成了存储容量的极大浪费,许多常用的字符往往只需要一个字节(如ASCII美国信息交换标准代码),于是utf-8编码应运而生,**它本质上是对Unicode编码的一个压缩**。
以4个字节的ucs4为例,一个字符无论其十六进制表示的值大小,都需要4个字节来存储。而utf-8则利用这一点,根据码值范围来决定编码占用的字节数,具体对应方式如下所示:
unicode码值范围 utf-8字节数 转化模板
0000--007F 1个字节 0XXXXXXX
0080--07FF 2个字节 110XXXXX 10XXXXXX
0800--FFFF 3个字节 1110XXXX 10XXXXXX 10XXXXXX
10000--10FFFF 4个字节 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

那么具体的转换过程是什么呢,我们来举一个例子:

  • B对应的unicode码为0x0042,因此应该按照第一个行的模板来转化,即把B的unicode码的后七位映射到X上,就得到01000010

其余的字符依此类推,如果位数不够就在前面补0.
从这里也可以看到,为什么中文utf-8表示大多是三个字节?因为unicode编码中中文码值范围就是0800--FFFF,转化的时候应用第三个模板,即三个字节。