我们面临的基本问题是世界上的书写语言不能简单地用256个8位元代码表示。以前的解决方案包括内码表和DBCS已被证明是不能满足需要的,而且也是笨拙的。那什么才是真正的解决方案呢?
身为程式写作者,我们经历过这类问题。如果事情太多,用8位元数值已经不能表示,那么我们就试更宽的值,例如16位元值。而且这很有趣的,正是Unicode被制定的原因。与混乱的256个字元代码映射,以及含有一些1位元组代码和一些2位元组代码的双位元组字元集不同,Unicode是统一的16位元系统,这样就允许表示65,536个字元。这对表示所有字元及世界上使用象形文字的语言,包括一系列的数学、符号和货币单位符号的集合来说是充裕的。
明白Unicode和DBCS之间的区别很重要。Unicode使用(特别在C程式设计语言环境里)「宽字元集」。「Unicode中的每个字元都是16位元宽而不是8位元宽。」在Unicode中,没有单单使用8位元数值的意义存在。相比之下,在双位元组字元集中我们仍然处理8位元数值。有些位元组自身定义字元,而某些位元组则显示需要和另一个位元组共同定义一个字元。
处理DBCS字串非常杂乱,但是处理Unicode文字则像处理有秩序的文字。您也许会高兴地知道前128个Unicode字元(16位元代码从0x0000到0x007F)就是ASCII字元,而接下来的128个Unicode字元(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字元都同样基於现有的标准。这是为了便於转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。
Unicode的最大好处是这里只有一个字元集,没有一点含糊。Unicode实际上是个人电脑行业中几乎每个重要公司共同合作的结果,并且它与ISO 10646-1标准中的代码是一一对应的。Unicode的重要参考文献是《The Unicode Standard,Version 2.0》(Addison-Wesley出版社,1996年)。这是一本特别的书,它以其他文件少有的方式显示了世界上书写语言的丰富性和多样性。此外,该书还提供了开发Unicode的基本原理和细节。
Unicode有缺点吗?当然有。Unicode字串占用的记忆体是ASCII字串的两倍。(然而压缩档案有助于极大地减少档案所占的磁碟空间。)但也许最糟的缺点是:人们相对来说还不习惯使用Unicode。身为程式写作者,这就是我们的工作。