今天咱们来谈谈Unicode。
在上节当中,我们遇到了一些看似很奇妙的问题。就是关于单双字节混排带来的文字处理上的不方便。这个问题还是小的,还有,大家想想,全世界这么多的国家, 还有一些国家的文字看上去都是奇形怪状的。零零总总,我们要在计算机里面表示的文字符号就不是能用两个字节能表示得下了。这是你也许会说,那增加俩字节不 就行了?对,是没错,可是带来的问题是,我们的文章里就出现了单,双和四字节同时存在的文字编码。这就又进一步加大了文字处理的难度。怎么办呢?这时候, unicode就应运而生了。
unicode编码的出现,其主要目的就是为了加强各国人民的互相沟通,使大家用一套编码方式就可以在你的电脑里看到世界各地的文字和各种奇怪的符号。 unicode是一视同仁的。所有的符号统统用4字节来表示。比如,就像我们前文说的“我”字,用unicode编码就是0x00006211。等等以此类推。unicode比以前多出来的那两位大家可以想象成一个空间位。规定它的最高位始终为0。低16位可以想象成一个256*256的平面,每256个 平面组成一个group,每然后就一共有128个组。用图形的方式表示大致如下:
其中的每一个Cell被叫做一个码位。显而易见,我们在每一个平面上都有256*256个码位。其中Group00的0号平面被用来放置常用的中英文符号,CJK统一汉字编码字符集及其扩充集。其中汉字的编码是一个连续的空间,从0x4e00( 19968 )到0x9fa5(40869)。一共0x51a6(20902)个字。具体示意如下图:
然后,后面的平面就都被叫做辅助平面,是用来补充新加进来的文字和符号的。那这时候肯定有人就会问了,现在采用unicode编码以后,我们的信息量不就是原来的两倍了么?理论上来讲呢,是没错的。但是unicode编码采取了一些措施来减少信息量。刚才我们提到的那个group 00中的0号平面,也被叫做基本平面。如果你不去玩儿另类非要做什么古籍整理的工作的话,平常人是基本上不会用到其它平面里面的字的。就此说来,如果你的一篇文章里面用到的字不超出第一平面里面的字的话,那么编码还是采取两位来做。是用unicode的后两位。然后,系统会自动在你的文章前添加一个量字节的信息:0xfeff来表示这篇文章是采用unicode编码的。(仅指纯文本方式,当然你用程序生成unicode编码的纯文本文件时候,别忘了在你的文件头自己写一个0xfeff进去。)
有了这个基础之后,我们的后续课程就可以顺利进行了。下一节我们将要讲到的是语料中汉字字频的统计。(刚刚熬夜看巴萨对阿森纳的欧洲冠军杯决赛,行文不是很流畅,欢迎大家批评指正。)