`

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

阅读更多
在软件开发过程中,可能接触到了很多字符集,但是其之间有什么细节上的差异呢,我想很多概念性的东西还是应该拿出来,做一个比较供我们日后开发过程中的参考只用。


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


我们一般通常使用的字符集有: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),用于文字处理等场合。操作系统和数据库管理系统等系统性软件需要同时支持这两种字符集,而一般的应用软件只需要选择一种适合自己的就行了。
分享到:
评论
2 楼 danlley 2009-03-17  
相当透彻,这个细节倒是没有注意到
1 楼 xieyongwei 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何乐而不用呢?

相关推荐

    VC++6.0核心编程源码.rar

    随着Microsoft公司的Windows操作系统在全世界日益广泛的流行,对于我们这些软件开发人员来说,将我们的目标瞄准国际上的各个不同市场,已经成为一个越来越重要的问题。美国的软件版本比国际版本提前6个月推向市场,...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    Java面试宝典2010版

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 5、说明生活中遇到的二叉树,用java实现二叉树 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复...

    最新Java面试宝典pdf版

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    Java面试笔试资料大全

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    java面试宝典2012

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 72 5、说明生活中遇到的二叉树,用java实现二叉树 73 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    JAVA面试宝典2010

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    Java面试宝典-经典

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    java面试题大全(2012版)

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    Java面试宝典2012版

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名...

    Java面试宝典2012新版

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 65 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和...

    新版Android开发教程.rar

    ANDROID 的推出后可能影响的产业包括移动电信业,软件开发业,手机制造业,在以消费者为核心的状 态 。 对消费者的影响 � 高档手机选择面增加。 � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从...

    net学习笔记及其他代码应用

    11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层...

    会计理论考试题

    16.应用软件在计算机普及中起重要作用,下列 ___D__ 都属于应用软件。 A、WPS、DOS、Lotusl-2-3 B、WIndows95、Word、Excel C、UNIX、AutoCAD、PoewPoint D、Word、Lotus 1-2-3、AutoCAD 17.编译软件属于 ___C___ 。...

    C语言标准教程第一章 C语言概论

    既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。 C语言版本  目前最流行的C语言有以下几种:...

Global site tag (gtag.js) - Google Analytics