分享

04.详解编码原理——编码学下部分

 xiejunxy 2019-02-06

本节知识体系

Unicode字符集(Unicode字符编码)

代码点

Unicode标准的本意很简单:希望给世界上每一种文字系统的每一个字符,都分配一个唯一的整数,这些整数叫做代码点(Code Points)。也叫字符的编码,字符的编号

代码空间

所有的代码点构成一个代码空间(Code Space),根据Unicode定义,总共有1,114,112个代码点,编号从0x0到0x10FFFF。换句话说,如果每个代码点都能够代表一个有效字符的话,Unicode标准最多能够编码1,114,112,也就是大概110多万个字符。最新的Unicode标准(7.0)已经给超过11万个字符分配了代码点。

代码平面

Unicode标准把代码点分成了17个代码平面(Code Plane),编号为#0到#16。每个代码平面包含65,536(2^16)个代码点(17*65,536=1,114,112)。其中,Plane#0叫做基本多语言平面(Basic Multilingual Plane,BMP),其余平面叫做补充平面(Supplementary Planes)。Unicode7.0只使用了17个平面中的6个,并且给这6个平面起了名字,如下图所示:

ASCII总共有128个字符,占据了BMP的前128个代码点。

代码组

因为两个使用了相同的字库字码。Unicode(和UCS)使用4字节编码字符,但是高字节的最高一位不参与编码,也就是31位。Unicode(UCS)31位bit如何划分?unicode(UCS)根据字节的先后顺序将四个字节分为四个部分。如下:

第一个字节后七位用来分组,共128组,第二个字节用来分平面,共256平面,每个平面有256行,每行有256码位,也就是每个平面有65536(2的16次方)个码位,码位中字符的编码并不是顺序编码,中间有空码位。这种分组分面的做法原本是UCS的做法,但后来统一后,Unicode也采用了这种方式。

Unicode只使用第0组(group)的第0-16平面(第0组的第0平面叫做基本平面,其他平面叫做辅助平面),其他平面不使用,那UCS也保证不给其他平面中的码位赋值,中文常见字符主要位于第二平面而且第二平面上貌似也只有中文,不常见字符在后面其他平面也有分布,所以,使用UTF-8编码的话,中文可能使用3-4个字节编码,使用UTF-16编码,中文使用4个字节编码,使用UTF-32编码,中文使用4字节编码。

在Unicode码表中,使用了UCS的第0组前17个面,而主要字符又集中在第0组的第0面(基本平面),也就是说最常用的字符1-3个字节就能够表示,对于一些特定语言的字符则使用的更少,如英语使用1个字节表示,中文大部分位于第二平面。

Unicode没有规定字符对应的二进制码如何存储。比如一个字符它的 Unicode 码点是 0x6c49,对应的二进制数是 110110001001001,二进制数有 15 位,这也就说明了它至少需要 2 个字节来表示。可以想象,在 Unicode 字典中往后的字符可能就需要 3 个字节或者 4 个字节,甚至更多字节来表示了。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

UTF的英文全称叫做Unicode Transformation Format,中文直译为Unicode转换格式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多