论坛首页 入门技术论坛

软件开发中,各个字符集之间的区别

浏览 2945 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-05   最后修改:2009-04-02
在软件开发过程中,可能接触到了很多字符集,但是其之间有什么细节上的差异呢,我想很多概念性的东西还是应该拿出来,做一个比较供我们日后开发过程中的参考只用。


这几天闲来无事,在网上差了一下各个字符集之间的区别,整理出来一方面供自己日后查阅,另一方面也贴出来供大家参考,其中有什么不当之处恳请指正。


我们一般通常使用的字符集有:ASCII ISO-8859-1  GB2312 big5 GBK  Unicode2.0,另外还有一种基于32位的GB18030字符集是国家新出来的一种字符集,其为一个汉字设计了4个字节,因此可以说是目前为止,对汉字支持无论是简体还是繁体都是支持比较好的一种,当然主要的缺点就是太占空间,不利于在网路上传输。


如果不考虑GB18030字符集的话,最详尽的字符集应该是Unicode了,差不多支持了GBK所支持的所有汉字不敢过总量上还是稍微差一点。GBK尽管不是国家标准,但是已经成为事实上的一个行业标准,同时支持汉字的简体和繁体两种字体。比Gig5和GB2312强大些,为了更加明确的说明各个字符间的差异,先详细说明如下:


ASCII:
7位字符集,包括52个大小写英语字母,10个阿拉伯数字,1个空格,32个符号。
适用于纯英文环境,兼容性最好,在其他各种字符集下都能正确识别;不适用于英语以外的环境。

Latin1(ISO-8859-1):8位字符集,向下兼容ASCII字符集,并增加了一些西欧语言中的字母和符号。
优点:适用于西欧语种,得到世界广泛的软件支持;
缺点:不能表示拉丁语系以外的语言,不兼容少量只使用7位字符集的古老程序。

GB2312:16位字符集,收录有6763个简体汉字,682个符号;
优点:适用于简体中文环境,属于中国国家标准,在大陆(和新加坡?)得到广泛支持;
缺点:不兼容繁体中文,其汉字集合过少。

big5:16位字符集,收录有13060个繁体汉字,440个符号;
优点:适用于繁体中文环境,属于台湾官方标准,为繁体Windows所使用,在台湾和香港得到广泛支持,而且,由于台湾软件业发展较早,国外软件支持big5的比支持gb2312/gbk的要多;
缺点: 不兼容简体中文环境,和gb2312之间需要转换。

GBK:16位字符集,收录有21003个汉字,883个符号;
优点:适用于简繁中文共存的环境,为简体Windows所使用(代码页cp936),向下完全兼容gb2312;
缺点:不属于官方标准,和big5之间需要转换。

GB18030:32位字符集;收录汉字数不详,应该相当详尽。
优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准;
缺点:由于空间使用效率低(一个汉字占四个字节),运行速度慢, 目前支持它的软件较少。

Unicode2.0: 16位字符集(ucs2),收录有汉字20902个,符号6811个;
优点:适用于国际化环境,可以做为字符的内部表示和存储形式,来实现软件的国际化、本地化;
缺点:目前支持较少,与其他中文字符集不兼容。

使用哪一种字符集,需要根据使用环境而定。不要盲目的使用最大最全的字符集,这样不仅运行效率差,占用多余空间,而且会降低软件的兼容性,因为不是所有运行环境都安装有所有字符集。

如果只处理英文,则可以使用Latin1字符集,目前绝大多数机子上都可以支持。如果只处理简体中文,使用GB2312,如果同时需要支持简繁体中文,使用 GBK;如果确实需要使用偏僻字,再使用GB18030;GB2312/BIG5/GBK/GB18030都只适用于中文环境,如果需要国际化,当然要使用unicode。

有人说,同时存在和使用这么多字符集,会人为的增加软件的开发难度和不兼容性。我也认同这一点,但是,目前多种字符集的存在,尤其是多种中文字符集并存,有其现实的背景和应用,不能简单的要求使用某一个字符集就完事,否则只是不切实际的空想。GBK的编码位利用率高,汉字覆盖面广,支持简繁体同时显示,并且广泛应用于简体中文Windows环境中,已近乎成为事实上的标准,得到了越来越广泛的国际支持,但它不是国家标准。最新的GB18030是典型的学院派标准,要用一个大而全的字符集来替代现有的GB2312、GBK等,却没有考虑到实际应用的可能性。且不说其在一般应用中造成的双倍的存储空间浪费和传输带宽浪费(虽然目前单位存储价格急遽下降,不需要在象过去那样计较,但也不表示我们可以任意挥霍),更重要的是其实现的高度复杂性和编码查找及转换时的低效率,这在系统软件当中是不可容忍的。

其实,任何一种字符集都不可能适用于所有环境,字符集的设计应该根据不同的需要来分别设计,在尽量避免重复功能的字符集的同时,保持字符集之间尽可能的兼容性。更好的中文字符集的实现应该是实现两种国家标准,一种16位字符集,一种32位字符集。16位字符集用于一般性应用,类似于目前的GBK(或者直接把GBK做为标准)。32位字符集向下兼容16位字符集(或直接采用Unicode 3.0),用于文字处理等场合。操作系统和数据库管理系统等系统性软件需要同时支持这两种字符集,而一般的应用软件只需要选择一种适合自己的就行了。
   发表时间:2009-03-13  
你好像有点冤枉GB18030了
GB18030 编码是一二四字节变长编码。一字节部分从 0x0~0x7F 与 ASCII 编码兼容。 二字节部分, 首字节从 0x81~0xFE, 尾字节从 0x40~0x7E 以及 0x80~0xFE, 与 GBK 标准基本兼容。 四字节部分, 第一字节从 0x81~0xFE, 第二字节从 0x30~0x39, 第三和第四字节的范围和前两个字节分别相同。 四字节部分覆盖了从 0x0080 开始, 除去二字节部分已经覆盖的所有 Unicode 3.1 码位。
就是说GB18030并不是所有的字符都要用四字节来表示,对于绝大部分汉字字符来说, 二字节部分已经够了,对于生僻字和Unicode字符才会用到三和四字节,所以GB18030何乐而不用呢?
0 请登录后投票
   发表时间:2009-03-17  
相当透彻,这个细节倒是没有注意到
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics