Unicode(统⼀码、万国码、单⼀码)
Unicode(统⼀码、万国码、单⼀码)是⼀种在计算机上使⽤的字符编码。它为每种语⾔中的每个字符设定了统⼀并且唯⼀的⼆进制编码,以满⾜跨语⾔、跨平台进⾏⽂本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机⼯作能⼒的增强,Unicode也在⾯世以来的⼗多年⾥得到普及。
Unicode****的编码和实现
⼤概来说,Unicode编码系统可分为编码⽅式和实现⽅式两个层次。
1.编码⽅式
Unicode的编码⽅式与ISO10646的通⽤字元集(亦称[通⽤字符集])(Universal Character Set,UCS)概念相对应,⽬前的⽤于实⽤的Unicode版本对应于UCS-2,使⽤16位的编码空间,也就是每个字符占⽤2个字节。
统⼀字符编码标准是⼀种⼗六位的字符编码标准,⽽ASCII则是七位编码,只适⽤于英⽂。另有西欧国家所⽤的ISO Latin-1⼋位编码。使⽤Unicode的好处就是⽤⼀个字符集就可解决所有现今世界上的可书写语⾔。Unicode共有2^16即65536个编码,其中有近39000种已被定义完成,⽽中国字就占了21000种!
上述16位Unicode字符构成基本多⽂种平⾯(Basic Multilingual Plane,简称(BMP)。最新(但未实际⼴泛使⽤)的Unicode版本定义了16个辅助平⾯,两者合起来⾄少需要占据21位的编码空间,⽐3字节略少。但事实上辅助平⾯字符仍然占⽤4字节编码空间,与UCS-4保持⼀致。未来版本会扩充到ISO10646-1实现级别3,即涵盖UCS-4的所有字符。UCS-4是⼀个更⼤的尚未填充完全的31位字符集,加上恒为0的⾸位,共需占据32位,即4字节。理论上最多能表⽰2^31个字符,完全可以涵盖⼀切语⾔所⽤的符号。
unicode汉字BMP字符的Unicode编码表⽰为U+hhhh,其中每个h代表⼀个⼗六进制数位。与UCS-2编码完全相同。对应的4字节UCS-4编码后两个字节⼀致,前两个字节的所有位均为0。
2.实现⽅式
Unicode的实现⽅式不同于编码⽅式。⼀个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不⼀定⼀致,以及出于节省空间的⽬的,对Unicode编码的实现⽅式有所不同。Unicode的实现⽅式称为Unicode转换格式(Unicode Translation Format,简称为UTF)。
再如,如果直接使⽤与 Unicode 编码⼀致(仅限于 BMP 字符)的 UTF-16 编码,由于每个字符占⽤了两个字节,在Macintosh (Mac)机和PC机上,对字节顺序的理解是不⼀致的。这时同⼀字节流可能会被解释为不同内容,如某字符为⼗六进制编码4E59,按两个字节拆分为4E和59,在Mac上读取时是
从低字节开始,那么在Mac OS会认为此4E59编码为594E,到的字符为“奎”,⽽在Windows上从⾼字节开始读取,则编码为 U+4E59 的字符为“⼄”。就是说在Windows下以UTF-16编码保存⼀个字符“⼄”,在Mac OS⾥打开会显⽰成“奎”。此类情况说明UTF-16的编码顺序若不加以⼈为定义就可能发⽣混淆,于是在 UTF-16 编码实现⽅式中使⽤了⼤尾序(Big-Endian,简写为UTF-16 BE)、⼩尾序(Little-Endian, 简写为UTF-16 LE)的概念,以及可附加的BOM(Byte Order Mark)解决⽅案,⽬前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使⽤UTF-16 LE。(具体⽅案参见UTF-16)
此外Unicode的实现⽅式还包括UTF-7、Puny code、CESU-8、SCSU、UTF-32等,这些实现⽅式有些仅在⼀定的国家和地区使⽤,有些则属于未来的规划⽅式。⽬前通⽤的实现⽅式是UTF-16⼩尾序(BOM)、UTF-16⼤尾序(BOM)和UTF-8。在微软公司Windows XP操作系统附带的记事本中,“另存为”对话框可以选择的四种编码⽅式除去⾮Unicode编码的ANSI外,其余三种“Unicode”、“Unicode Big Endian”和“UTF-8”即分别对应这三种实现⽅式。
⽬前辅助平⾯的⼯作主要集中在第⼆和第三平⾯的中⽇韩统⼀表意⽂字中,因此包括GBK、GB18030、Big5等简体中⽂、正体中⽂、⽇⽂、韩语以及越南字符的各种编码与Unicode的协调性被重点关注。考虑到Unicode最终要涵盖所有的字符,从某种意义⽽⾔,这些编码⽅式也可视作Unicode的出现于其之前的既成事实的实现⽅式,如同ASCII及其扩展Latin-1⼀样,后两者的字符在16位Unico
de编码空间中的编码第⼀字节各位全为0,第⼆字节编码与原编码完全⼀致。但上述东亚语⾔编码与Unicode编码的对应关系要复杂得多。
⾮Unicode环境
在⾮Unicode环境下,由于不同国家和地区采⽤的字符集不⼀致,很可能出现⽆法正常显⽰所有字符的情况。微软公司使⽤了代码页(Code page)转换表的技术来过渡性地部分解决这⼀问题,即通过指定的转换表将⾮Unicode的字符编码转换为同⼀字符对应的系统内部使⽤的Unicode编码。可以在“语⾔与区域设置”中选择⼀个代码页作为⾮Unicode编码所采⽤的默认编码⽅式,如936为简体中⽂GBK,950为正体中⽂Big5(皆指PC上使⽤的)。在这种情况下,⼀些⾮英语的欧洲语⾔编写的软件和⽂档很可能出现乱码。⽽将代码页设置为相应语⾔中⽂处理⼜会出现问题,这⼀情况⽆法避免。从根本上说,完全采⽤统⼀编码才是解决之道,但⽬前上⽆法做到这⼀点。
代码页技术现在⼴泛为各种平台所采⽤。UTF-7的代码页是65000,UTF-8的代码页是65001。
XML****和Unicode
XML及其⼦集HTML采⽤UTF-8作为标准字集,理论上我们可以在各种⽀持XML标准的浏览器上显⽰任何地区⽂字的⽹页,只要电脑本⾝安装有合适的字体即可。可以利⽤&#nnn;的格式显⽰特定的字符。nnn代表该字符的⼗进制Unicode代码。如果采⽤⼗六进制代码,在编码之前加上x字符即可。
但部分旧版本的浏览器可能⽆法识别⼗六进制代码。
然⽽部分由于Unicode版本发展原因,很多浏览器只能显⽰UCS-2完整字符集也即现在使⽤的Unicode版本中的⼀个⼩⼦集。
输⼊Unicode
除了输⼊法外,操作系统会提供⼏种⽅法输⼊Unicode。像是Windows2000之后的Windows系统就提供⼀个可点击的表。例如在Microsoft Word之下,按下Alt键不放,输⼊0和某个字符的Unicode编码(⼗进制),再松开Alt键即可得到该字符,如Alt+033865会得到Unicode字符叶。另外按Alt+X组合键,MSWord也会将光标前⾯的字符同其⼗六进制的四位Unicode编码进⾏互相转换。
Unicode⽬前已经有5.0版本。世界上有⼀⼤批计算机、语⾔学等科学家专门研究Unicode,到了现在Unicode标准已经不单是⼀个编码标准,还是记录⼈类语⾔⽂字资料的⼀个巨⼤的数据库,同时从事⼈类⽂化遗产的发掘和保护⼯作。
对于中⽂⽽⾔,Unicode16编码⾥⾯已经包含了GB18030⾥⾯的所有汉字(27484个字),⽬前Unicode标准准备把康熙字典的所有汉字放⼊到Unicode32bit编码中。
UTF-8
UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是⼀种针对Unicode的可变长度字符编码。它可以⽤来表⽰Unicode标准中的任何字符,且其编码中的第⼀个字节仍与ASCII相容,这使得原来处理ASCII字符的软件⽆需或只需做少部份修改,即可继续使⽤。因此,它逐渐成为电⼦邮件、⽹页及其他储存或传送⽂字的应⽤中,优先采⽤的编码。
UTF-8使⽤⼀⾄四个字节为每个字符编码:
128个US-ASCII字符只需⼀个字节编码(Unicode范围由U+0000⾄U+007F)。
带有附加符号的拉丁⽂、希腊⽂、西⾥尔字母、亚美尼亚语、希伯来⽂、阿拉伯⽂、叙利亚⽂及它拿字母则需要⼆个字节编码(Unicode范围由
U+0080⾄U+07FF)。
其他基本多⽂种平⾯(BMP)中的字符(这包含了⼤部分常⽤字)使⽤三个字节编码。
其他极少使⽤的Unicode辅助平⾯的字符使⽤四字节编码。
对上述提及的第四种字符⽽⾔,UTF-8使⽤四个字节来编码似乎太耗费资源了。但UTF-8对所有常⽤的字符都可以⽤三个字节表⽰,⽽且它的另⼀种选择,UTF-16编码,对前述的第四种字符同样需要四个
字节来编码,所以要决定UTF-8或UTF-16哪种编码⽐较有效率,还要视所使⽤的字符的分布范围⽽定。不过,如果使⽤⼀些传统的压缩系统,⽐如DEFLATE,则这些不同编码系统间的差异就变得微不⾜道了。因为传统压缩算法在压缩较短⽂字时的效果不⼤,可以考虑使⽤Standard Compression Scheme For Unicode(SCSU)。
Unicode字符的位元被分割为⼏部分,并分配到UTF-8的字节串中较低的位元的位置。在U+0080的以下字符都使⽤内含其字符的单字节编码。这些编码正好对应7位元的ASCII字符。在其他情况,有可能需要多达4个字符组来表⽰⼀个字符。这些多字节的最⾼有效位元会设定成1,以防⽌与7位元的ASCII字符混淆,并保持标准的字节主导字串(standard byte-oriented string)运作顺利。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论