Unicode是由Microsoft、Apple、HP、Next、SUN、Xerox等公司支持的字符编码标准。它是一种16位的编码方案,例如“韩”字的Unicode编码是97E9。通过在应用程序中实现Unicode,开发者可以使应用程序具有通用数据交换能力,对每种可能的字符代码只需使用单个二进制文件即可,有效地简化了软件的本地化工作。
Unicode定义了各个字符的语义,使手写体行为标准化,提供双向文字的标准算法以及到其他标准的交叉映射。Unicode能够代表当今计算机使用的所有世界字符,包括技术符号和印刷中的特殊字符。
Unicode包含了象形文字的几个国家或地区标准:GB 2312—80(中)、JIS 0208—83(日)、KSC 5601—87(韩)、CNS 11643—86(中国台湾地区)等。
从Unicode 2.0开始,Unicode协会采用了与ISO 10646-1相同的字库和字码,但双方仍独立地公布各自的标准。Unicode协会的最新版本是2005年的Unicode 4.1.0,ISO的最新标准是10646-3:2003。因此,ISO10646标准的简称UCS也可以被看做“Unicode Character Set”的缩写,Unicode编码也可以被看做ISO10646国际标准的一种实现方法。
UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UCS转换格式UTF(UCS Transformation Format)规范规定的。UTF是将Unicode编码规则和计算机的实际编码对应起来的一个规则,常见的UTF规范包括UTF-8、UTF-16。
1.UTF-16
如果字符编码位于BMP(32位的UCS编码空间按字节从高到低依次划分为组、平面、行、列四维,其中高16位为0的代码集合称做基本多语种平面BMP),UTF-16和上面UCS编码规范一致,无须转换。UTF-16也可以使用代理法把BMP以外的字符编码转换成16位编码,即用BMP中两个16位编码单元来表示。(www.daowen.com)
在BMP中,D800~DFFF被用做UTF-16的代理区,在代理区中选取两个16位的Uni-code编码作为BMP平面外4字节字符编码的代表。前16位(高半字)只能选用D800~DBFF当中之一,后16位(低半字)只能从DC00~DFFF中选取。高低半字各有编码位置1 024=4×256。因此UTF-16可代表(4×256)×(4×256)=16×65536个编码位置,或16个字符平面。应用于ISO的0组第一到第十四个平面(第十五平面为专用平面,不予编码),编码的范围为00010000~000EFFFF,对应的二进制数值均为20位。
例如,将范围为00010000~000EFFFF的编码值转换为UTF-16编码规则很简单:将20位二进制数值从右往左取出10位,加上110111(DC00~DFFF二进制数值的前6位),构成UTF-16编码的低半字,接着往左取出6位,作为UTF-16编码的高半字的低6位,再往左取出4位,将其值减1,置于刚才6位的左面,最后在前面加上110110,就构成UTF-16编码的高半字。
2.UTF-8
UTF-8是Unicode代码集的另外一种编码方式,它是变长度的,最多6字节。UTF-8定义了一种“区间规则”,使其可以和ASCII编码保持最大程度的兼容。
UTF-8有点类似于哈夫曼(Huffman)编码,编码的长度可变,常用的字符所用的字节数也少。它将Unicode编码为00000000~0000007F的字符,用1字节来表示,这样就与ASCII代码集的结果一样,因而具有非常好的兼容性,ASCII编码下的英语文本不需要修改就可以当做UTF-8编码进行处理,应用非常广泛。UTF-8将Unicode编码的00000080~000007FF的字符用2字节表示;00000800~0000FFFF的字符用3字节表示等。RFC2279给出了从ISO10646到UTF-8的转换规则。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。