细说Unicode
历史上,有两个独立的,创立单一字符集的尝试。一个是国际标准化组织(ISO)的ISO10646项目,于
1993年发布,简称UCS,全称UniversalMultipleOctetCodedCharacterSet。另一个是由(一开始大
多是美国的)多语言软件制造商组成的协会组织的Unicode项目。幸运的是,1991年前后,两个项目的参
与者都认识到,世界不需要两个不同的单一字符集.它们合并双方的工作成果,并为创立一个单一编码表
而协同工作。两个项目仍都存在并独立地公布各自的标准,但Unicode协会和ISO/IECJTC1/SC2都同
意保持Unicode和ISO10646标准的码表兼容,并紧密地共同调整任何未来的扩展。参考Olle
Järnefors这篇文章《ShortoverviewofISO/IEC10646andUnicode》。
在Unicode系统内,每一个符号都有一个名字,以全大写字母表示,如基本拉丁字母A的Unicode名
字就是LATINCAPITALLETTERA,连字符就叫做HYPHENMINUS,码值U+002D。Unicode的出
现,使得世界上大多数语言符号都实现电子化,当然作为最多文字符号的中国自然是最值得高兴的事,
你看来☯这样国粹都可以当作字符来编码,这还得感谢那批在为标准化工作的专业人员。这些多功能字
符定义在U+2600U+26FF,通过码表可以查看到。
开始UCS方案使用2字节编码,如U+0032表示空格,U+0041表示字母A,U+0061表示字母a,这
种U+形式的值就是码值USV(UnicodeScalarValues)。为了保证今后编码空间不被填满,又定义了一
个4字节的新标准UCS4,前者就相应称作UCS2。UCS2使用高8位作为行编码,低8位为列编码,
形成一个256行256列的逻辑数据结构。这样0行中的256个列空间就用来存储标准的ISO/IEC88591
编码,这时ANSII字符是以两个字节进行存储的,内存消耗原来的2倍。对于UCS4方案,指定第一
字节的最高位设置为0,用第一字节剩余的7位表示2^7=128分组,第二个字节表示2^8=256平面。余
下两字节保持UCS2相同的逻辑结构,因此可以兼容。这样0组0平面上就存放有UCS2的完整编
码,它又称为基本多语言平面BMP(basicmultilingualplane)。收录有21204个在中、日、韩使用的象
形字(ideographiccharacters),有6656个韩国象形象声字(morphogramsandsyllabograms),总字符
接近极限容量34203个。第二个平面就称为增补平面SMPSupplementaryPlanes,第三个平面就是象
形字增补平面SIP(SupplementaryIdeographicPlane)。