字符集与编码系列:Unicode字符集

基本概念

 

1.字符集:要想在计算机中显示文字,必须把文字都收集起来放在一个表中,这个表叫字符集(Charset)。

2.码表:字符集中的每个文字,都分配一个数字号码,这叫码表(Code chart)。比如中文 ‘霸’字,在码表中对应的码是38712(十进制),或者9738(十六进制)。

3.编码方式:有了码表,就需要确定哪些文字用几个字节表示,以及如果有多个字节代表一个字,字节的读取顺序,这些就是字符编码方式(Encoding)。

虽然为了严谨起见,上面我把字符集和码表分开说明,但实际上很多字符集也给每个字符分配了一个码(Code Point),所以很多人经常也把字符集叫做码表、码表叫做字符集。

Unicode

目前国际通用的字符集叫Unicode(又叫万国码、统一码),全世界所有民族地区的文字基本都包含在里面。它的出现是为了解决世界各地用不同的一套字符集,然后计算机软件无法兼容共用的问题,造福了软件开发者,也方便了用户。下图就是Unicode字符集中汉字(CJK)码表的样子,每个汉字都有个号码,比如4E00就是一的号码。

 

 

Java语言默认就使用Unicode字符集。

Unicode字符集把全世界主要文字都包括进来,刚开始每个字符用2个字节来表示,值范围0x0000~0xFFFF,共可以表示65536个字符。

后来2个字节发现不够用,比如生僻字、网络流行的电子表情符号emoji等,因此Unicode字符集不停地扩充,字符集越来越庞大,现在的Unicode字符集的编码空间扩充到3个字节,最大值为0x10FFFF,某些新字符需要3个字节才能表示。

 平面(Plane)和块(Block)

Unicode扩充之后,为了便于描述和统一分配,就有了一个新的概念:平面(Plane)。除了之前的FFFF两个低字节用来表示字符的码,第三个字节的值用来表示平面编号。比如Unicode码0x10FFFF中的0x10,就是平面编号,因此,现在的Unicode有0-16共17个平面,每个平面可以容纳FFFF个文字,所以:

理论上Unicode容纳的字符数量0x10FFFF = 平面数量 × 每平面容量 = 17 × 65536 = 1114112个

平面又包含了块(Block)的概念,一个块就是一个字节的空间,最多能表示256个字符。一个平面是2个字节的空间,最大FFFF,低位的FF是一个块,高位的FF用来作为块的编号。所以:

理论上一个平面字符数量 = FF个块 × 每个块FF个字符 = 256 ×256 = 65536个字符

BMP平面

Unicode最重要、最常用的平面是第一个平面,简称BMP(Basic Multilingual Plane ),编号为0,其实也就是最早的那65535个文字,其中已经包含了世界各民族的常用文字。其中,汉字(CJK)是占空间最多的,下图浅红色从34一直到9F共107个块,每个块又能表示256个字符,所以

理论上BMP平面包含汉字数量 = 107 × 256 = 27392个

 平面总体使用情况

目前0~16共17个平面的字符分配范围如下表。可以看到,平面4-13是空闲的,暂未分配任何字符。平面14~16是特殊平面和私有平面。

除了第0个平面BMP,平面1、2、3也已经扩展了不少字符。汉字除了在平面0霸榜,在平面2和3再次“包场”,这两个平面基本都是新补充进来的汉字生僻字。

 关于Unicode字符集的知识,先介绍到这里,下一篇讲Unicode和Java中的char类型。

 Unicode权威资料传送门:

        官网用户主页:Unicode官网 

        官网技术主页:Unicode Standard 

        目前最新版本是2021年9月发布的14.0版:Unicode 14.0.0

        最新版码表:Unicode 14.0 Character Code Charts

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六吨代码

肝到半夜了,赏五毛行不?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值