文章目录
- 一、什么是unicode
- 二、什么是编码
- 三、.unicode和utf-8编码是什么关系
- 四、示例
- 五、编码规则是什么
一、什么是unicode
UNICDOE是一个字符集,它定义了世界上所有字符的唯一编号
,每一个字符编号称为码点
详细参考- https://www.cnblogs.com/IllidanStormrage/articles/16593974.html
二、什么是编码
编码是一种将信息从一种形式或格式转换为另一种形式或格式的过程
三、.unicode和utf-8编码是什么关系
- UTF-8是unicode的实现方式之一
- UTF-8编码是根据
unicode码点
来进行编码的,也就是编码对象就是unicode码点
四、示例
你需要一个二进制查看器,我这里使用的是010editor, 你也可以使用在线网站
http://www.metools.info/code/utf8235.html
我这里写下不同字符然后用二进制查看器打开查看
我写下 1
时有, 其二进制为 00110001
, 16进制表示为0x31
我写下 中
时,有3个字节 二进制为11100100 10111000 10101101
, 16进制表示为 E4 B8 AD
以上都是经过了UTF-8编码后的数据
五、编码规则是什么
如 1
的码点为 0x31,经过编码之后还是0x31
中
的码点为 0x4E 0x2D
经过编码后是 0xE4 0xB8 0xAD
可以发现,不同的码点经过utf-8编码后有不同的编码结果,编码规则如下
00-7F: 0xxxxxxx80-7FF: 110xxxxx 10xxxxxx800-FFFF: 1110xxxx 10xxxxxx 10xxxxxx
10000-10FFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
前面的 00-7F
为码点的范围, 后面则是对应码点的编码规则
1
的码点为 0x31,范围在00-7F,要遵循后面对应的规则 0xxxxxxx
将0x31转为二进制 110001
,根据 0xxxxxxx
的规则,从右开始补充二进制
0x110001
多出的x进行补0
00110001
根据上面的规则,我们的中
字编码后是3个字节,一眼就能看出是第三行的编码规则
中的unicode码点为 0x4E2D
,也确实在 800-FFFF的范围
4E3D转为二进制就是 01001110 00101101
要拆分为3个部分,每个部分的位数分别为4 6 6
也就是
0100 111000 101101
根据规则,在每个部分前补上相应的位
1110xxxx 10xxxxxx 10xxxxxx
11100100 10111000 10101101
最后三个字节为 E4 B8 AD
和我们前面示例的一样
这就是UTF-8的编码规则