MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 大家来讨论一下unicode和utf-8解决方案

大家来讨论一下unicode和utf-8解决方案(4)

www.MyException.Cn  网友分享于:2013-01-20  浏览:82次


严格说,GBK不能算是国家标准,最多算是一个商业标准。而GB18030才是真正的国家标准。

GB18030-2000 

全称是《信息交换用汉字编码字符集》,是我国的强制标准,所有不支持GB18030标准的软件将不能作为产品出售。

· 单字节、双字节、四字节编码。 

· 向下与GB2312编码兼容。 

· 支持GB 13000.1-1993中的全部中、日、韩(CJK)统一汉字字符和全部CJK统一汉字扩展A的字符。 

虽然GB18030标准非常强大,但它是一个中国大陆的标准。在编码上,除了和GB2312以外,还是不能和世界上其它任何一种字符编码统一。

终极标准 —— Unicode和ISO 10646 
前面所讲的一切字符编码方案,都是针对局部地区或少数语言文字的,没有办法同时表达所有的语言文字,或在多种语言平台上交换。这对今天极其频繁的国际信息交流是不相称的。

为了提高计算机的信息处理和交换功能,使得世界各国的文字都能在计算机中处理,从1984年起,ISO组织就开始研究制定一个全新的标准:通用多八位编码字符集(Universal Multiple-Octet Coded Character Set),简称UCS。标准的编号为:ISO 10646。这一标准为世界各种主要语言的字符(包括简体及繁体的中文字)及附加符号,编制统一的内码。

统一码(Unicode)是Universal Code的缩写,是由另一个叫“Unicode学术学会”(The Unicode Consortium)的机构制定的字符编码系统。Unicode与ISO 10646国际编码标准从内容上来说是同步一致的。

Unicode是Java语言和XML的基础,所以我们要稍微详细地介绍一下Unicode以及ISO 10646标准。

注意:不够耐心的读者可以跳过本章的余下部分。但显然了解本章所描述的Unicode及相关编码的技术细节,有利于你更好地理解和应用Unicode。

Unicode和ISO 10646的关系
在1991年,Unicode学术学会与ISO国际标准化组织决定共同制订一套适用于多种语言文本的通用编码标准。Unicode与ISO 10646国际编码标准于1992年1月正式合作发展一套通用编码标准。自此,两个组织便一直紧密合作,同步发展Unicode及ISO 10646国际编码标准。

ISO 10646(UCS)
 Unicode 
 
1993年,ISO组织发表ISO 10646国际编码标准的第一个版本,全名是ISO/IEC 10646-1:1993。它收录了20902个表意字符(ideograph,中日韩文均属表意字符)。
 同年,Unicode学术学会根据ISO/IEC 10646-1:1993修订了Unicode 1.0,发布Unicode 1.1。
 
不断改善和修订ISO 10646标准。
 1996年发表Unicode 2.0,1998年发表Unicode 2.1,根据ISO 10646做了一些改善和修订,新增了欧元符号。
 
2000年10月发表了ISO 10646第二版的第一部分:ISO/IEC 10646-1:2000,新增收了6,582个表意字符于扩展区A中(CJK Unified Ideographs Extension A)。
 2000年2月,发表Unicode 3.0,也包含了同样的CJK Ext A。
 
2001年,发表了ISO/IEC 10646的第二部分,增收了42711个表意字符于扩展区B里。
 2001年,Unicode发表3.1版,将CJK Ext B纳入新版Unicode中。
 


虽然两个组织保持如此密切的合作关系,但Unicode和ISO 10646还是有区别的。ISO 10646着重定义字符编码,而Unicode则在此基础上,为这些字符及编码数据提出应用的方法以及对语义数据作补充。

UCS的结构
UCS的结构是一个四维的编码空间,每一维由一个字节(八位二进制位)组成,范围是00到FF。总体上分为128个群组(Group 00-7F),每一群组由256个平面(Plane 00-FF)组成,每一平面有256行(Row 00-FF),每一行256个编码位(Cell 00-FF)。所以,每一平面包括65,536个字符位(Character Position 0000-FFFF)。

整个编码字符集的每个字符都由4个字节,按“组-面-行-列”的顺序表示。所以UCS的可编码空间为:128 × 256 × 256 × 256 = 231。

UCS将其第一个平面(00群组中的00平面)称作基本多语种平面(Basic Multilingual Plane,BMP)。




 

在UCS中,目前只有00组是重要的,Unicode学术学会断言,在可以预见的将来,甚至不可能用完00组中的前17个平面(00平面到10平面)。因此,Unicode只定义了ISO 10646的第00组的前17个平面。事实上,目前绝大多数字符,都分配在第00平面BMP中。




 

下表中列出了BMP中的字符分配情况:

区间
 描述
 
(0000-1FFF)基本拼音字符区
 包括所有拼读文字的字母拼音和音标。它的字符集一般较小,如:拉丁文、西里尔文、希腊文、希伯来文、阿拉伯文、泰文、天成文书(梵文)等。
 
(2000-28FF)符号区
 包括许多种用于标点、数学、化学、科技及其它特殊用途上的“符号”和“丁贝符”(示意图形符号)。
 
(2E80-33FF)中日韩语音及符号区
 包括用于中国、日本、韩国语言中的标点、符号、字根(笔画)及发音等字符。
 
(3400-9FA5)中日韩汉字字符区
 由27,484个中日韩(越)的统一汉字组成。
 
(A000-A4C6)彝族字符区
 由1,165个中国南方彝族音节和50个其字根组成。
 
(AC00-D7A3)韩字符拼音区
 由11,172个预先组合的韩字符拼音音节组成。
 
(D800-DFFF)代理区
 这个区被平分为1024个“高半代理区”(D800-DBFF)码位和1024个“低半代理区”(DC00-DFFF)码位,用来形成代理对,可以得到超过一百万个扩充编码位。
 
(E000-F8FF)私人专用区
 包含6,400个编码位,用于用户或开发商自行定义的字符编码。
 
(F900-FA2D)兼容字符区
 包括一些被许多行业协会和国家标准广泛使用的字符,但在Unicode编码中有不同的表现形式。包含一些专用字符。
 


UCS的表现形式
UCS有两种方式来表示一个字符编码:四字节正规形式(UCS-4,Four-octet canonical form)和双字节基本平面形式(UCS-2,Two-octet BMP form)。

UCS-4 —— 四字节正规形式 

UCS-4用4个字节来表示一个字符。第一个字节表示组(Group),第二表示平面(Plane),第三表示行(Row),第四表示单元号或列(Cell)。

UCS-2 —— 双字节基本平面形式 

当系统只使用BMP的字符码时,可以省略群组和平面中的八位,将字符码由32个位缩短为16个位(2个字节)。标记为UCS-2。

Unicode和UCS-2同样采用16位编码。所以一般可以把Unicode和UCS-2看作是同一样东西。

代理对(Surrogate Pair) 

UCS-4定义了4个字节表示一个字符,用来应付将来的扩展是绰绰有余。可是Unicode和UCS-2只定义了2个字节,却很容易用尽。代理对(Surrogate Pair)的设计在这种背景下应运而生。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有