一.Unicode
前言
本篇文章介绍unicode
定义
unicode的中文翻译为统一码,也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准。
简单的来看,unicode就是一个数字,每一个数字对应一个字符的编码,这个字符囊括了整个世界使用的全部语言和符号的字符,所以,从根本上来说,unicode就是一个映射表,一个从数字到文字的映射
unicode发展
1990年开始研发,1994年正式发布1.0版本,2023年12月12日发布15.1.0版本。共收录149,813个字符。
UCS-2和UCS-4
UCS:Universal Character Set的简称,中文叫通用字符集,使用八位编码,是计算机用来表示所有字符的集合。
UCS-2:2个字节编码的通用字符集,其实对应的类型一般就是unsigned short,一般两个字节就可以包含大部分的欧美字符和常用中文。
UCS-4:4个字节编码的通用字符集,其实对应的类型一般就是unsigned int,四个字节可以包含所有目前计算机可以表示的字符
unicode的编码方式
因为UCS-2从原理上来说是UCS-4的子集,所以我们用UCS-4的编码来讲解unicode的编码方式,也就是我们把一个unicode码理解为unsigned int
一个unicode码有四个字节:A B C D,A是最高位字节
A的首位一定是0,也就是A的表示范围为00000000~01111111,供128个值,我们把这128个值称为group,一个unicode码一定位于这128个group之中,其实目前所有已使用的都是group0,也就是A其实是0.
B表示范围为00000000~11111111,共256个值,我们把这256个值称为平面,其实现在unicode编码使用的平面也占很少一部分,后面会介绍
C表示范围为00000000~11111111,共256个值,我们把这256个值称为行,所以现在每个平面有256行
D表示范围为00000000~11111111,共256个值,我们把这256个值称为码位,所以现在每个平面有256*256=65536个码位
每个码位就代表一个字符的unicode值
虽然原理上unicode可以支持32768 * 65536个码位,但是实际上根本用不到这么多,可能随着以后很多特殊符号的产生,会使用更多的码位,但是现在所有的unicode码位集中在第0个group,第0~第16个平面的所有码位,用unicode的字节范围表示就是0x000000~0x10FFFF,我们列一下基本的平面分类:
0平面:编码范围0x0000~0xFFFF,0平面也叫基本多文种平面,该平面基本包含了所有的文字编码,包括大部分的中日韩表意文字和世界各国语言的字符
其中,编码范围0xE000-0xF8FF,共6400个码位,叫做专用区,这部分是没有字符的
其中,编码范围0xD800-0xDB7F,被称为代理对高位字
其中,编码范围0xDB80-0xDBFF,被称为代理对私用区高位字
其中,编码范围0xDC00-0xDFFF,被称为代理对低位字
这三部分被称为代理区,编码范围为0xD800-0xDFFF,共2048个码位,这部分也是没有字符的
1平面:编码范围0x10000~0x1FFFF,1平面被叫做多文种补充平面,我们平常使用的很多表情符号就定义在该平面
2平面:编码范围0x20000~0x2FFFF,2平面被叫做表意文字补充平面,顾名思义,该平面是针对于中日韩表意文字的补充
3平面:编码范围0x30000~0x3FFFF,3平面被叫做表意文字第三平面,顾名思义,该平面是针对于中日韩表意文字的补充
4~13平面是未使用的平面
14平面:编码范围0xE0000~0xEFFFF,14平面被叫做特别用途补充平面,这个平面定义了两个块,分别为标签块,编码范围0xE000