那些坑人的乱码问题(中)

2022-08-26 09:51:57 浏览数 (1)

Unicode编码

上篇中已经讲了编码的基本概念,本来是直接写MySQL的编码问题的,但是觉的Unicode字符集和UTF编码太重要了,以至于不能忽略这部分内容。

Unicode出现原因这里不再赘述,再次强调对于 Unicode的一些误解,它仅仅只是一个字符集,不是编码,规定了符号对应的二进制代码,至于这个二进制代码如何存储则没有任何规定。它的目标就是为每个字符规定一个用来表示该字符的数字,仅此而已。Unicode编码是统一标准没错,但并不是收录了世界上已有的所有字符,有部分字符是没有收录的,也就是Unicode编码并没有完全兼容所有的字符编码系统

Unicode的编码范围为U 0000 ~U 10FFFF,不难计算出一共包含16^4∗17=1114112个码位。

整个编码空间划分为0~16共17个平面(plane简单理解划分了17块),每个plane包含16^4=65536个码位,其中0号空间叫做基本多文种平面,其他平面叫做补充平面。

plane

编码范围

名称

0

U 0000 ~ U FFFF

基本多文种平面

1

U 10000 ~ U 1FFFF

多文种补充平面

2

U 20000 ~ U 2FFFF

表意文字补充平面

3

U 30000 ~ U 3FFFF

表意文字第三平面

4~13

U 40000 ~ U 4FFFF

未使用

14

U E0000 ~ U EFFFF

特别用途补充平面

15~16

U F0000 ~ U 10FFFF

保留作为私人使用区

基本多文种平面

即第0平面,这个平面收录了几乎所有现代语言的常用字符和符号,也是最常使用的一个平面,这个平面除了常规的字符以外,还有两部分比较特殊:

代理:在第0平面中U D800 ~ U DFFF2048个码位被保留作为代理:

高代理:U D800 ~ U DBFF 低代理:U DC00 ~ U DFFF 这里他们的作用不做讲解,放在后文讲UTF-16时讲解。

变量选择器:U FE00 ~ U FE0F

变量选择器是用来指明特定字符的选择类型,这几个特定字符其实我们每个人都是使用,就是我们平时聊天软件中使用的emoji表情,比如

0 人点赞