`

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

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


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


我们一般通常使用的字符集有: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何乐而不用呢?

相关推荐

    软件开发技术常用术语英中对照

    ### 软件开发技术常用术语英中对照 在软件开发领域中,存在大量专业术语,这些术语在日常工作中频繁出现。为了便于理解和交流,以下将详细介绍这些术语及其含义。 #### A.I. (Artificial Intelligence) **人工智能...

    51单片机常用辅助开发软件合集

    在电子工程领域,51单片机是一种广泛应用的微控制器,尤其在...总的来说,这个51单片机常用辅助开发软件合集是一个全面的工具包,涵盖了从设计到调试的各个环节,对于任何51单片机开发者来说都是不可或缺的参考资料。

    易语言取随机字符源码.7z

    易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程的难度,让不懂英文的用户也能进行软件开发。在易语言中,"取随机字符"功能是用于生成指定长度的随机字符串,常用于密码生成、数据填充或者加密等领域...

    flex php显示乱码解决

    此类问题往往源于各个组件之间的字符集设置不一致。 #### 问题描述 主要出现了以下几种乱码问题: 1. **问题一**:从MySQL数据库中读取的中文数据,在经过PHP处理后传递给Flex客户端显示时出现乱码。 2. **问题二*...

    Unicode知识介绍

    ### Unicode知识介绍 ...理解Unicode及其相关概念对于从事软件开发、网页设计或任何涉及文本处理的领域都是至关重要的。随着全球化的不断推进,Unicode的重要性只会持续增加,成为连接世界语言的桥梁。

    IT软件开发常用英语词汇经典大全.doc

    在IT软件开发中,英语词汇是必不可少的一部分,它涉及到各个领域的技术术语。以下是一些关键概念的详细解释: 1. **抽象(Abstract)**:在编程中,抽象指的是将复杂系统简化为更易于理解的基本元素的过程。这通常...

    J2EE平台下的乱码问题分析及解决

    在现代信息技术领域中,字符编码问题始终是国际化软件开发过程中一个非常重要的问题。尤其在J2EE平台下,字符编码的处理不当常常会导致乱码问题的出现。乱码不仅影响用户体验,还会给开发者带来不小的困扰。根据乱码...

    XML学习中文版

    - **其他字符集与Unicode字符集之间的转换:** 如何在不同的字符集之间进行转换。 - **如何使用其他字符集编写XML:** 在使用非Unicode字符集的情况下编写XML文档的方法。 **7.6 本章小结** - 总结了如何处理非...

    ASCII 码字符表.pdf

    ### ASCII码字符表详解 #### 一、概述 ASCII(American Standard Code for Information Interchange,美国标准信息交换码)...掌握ASCII码的基本原理及其在编程中的应用对于学习计算机科学和软件开发具有重要的意义。

    在websphere中设置解决中文显示乱码问题

    例如,当浏览器与服务器之间使用的字符集编码不一致时,中文等非ASCII字符就会出现乱码现象。解决这类问题的关键在于确保整个请求处理过程中字符集的一致性。 #### 解决方案步骤 ##### 步骤一:确认客户端浏览器的...

    java软件开发基本单词.doc

    以上是对Java软件开发基本词汇的详细介绍,涵盖了面向对象编程的基本概念、Java核心组件、异常处理、标准库、GUI编程、数据库编程以及JBuilder中常用的命令。这些知识点对于Java初学者来说非常重要,能够帮助他们更...

    软件——汉字库

    ST7920汉字库中的字形码表,如A1A0至A1F0,详细列出了各个字符的编码与字形信息。例如,“A1A0”部分包含了中文标点符号,如“、。”、“·”等,这些符号在日常文本编辑中极为常见。通过这样的字形码表,软件能够...

    自动化测试技术在FADEC控制软件中的应用.pdf

    6. 持续集成和持续部署(CI/CD):将自动化测试整合到软件开发的CI/CD流程中,可以确保软件的连续质量监控和快速迭代。这在FADEC这类要求极高的领域中尤为重要。 7. 虚拟测试和仿真:由于实际的FADEC测试可能成本...

    互联网软件应用与开发学习笔记.pdf

    MIME是对原来标准邮件协议的扩充,能够在单一消息内带有多种媒体,如声音、图像、动画等文件,扩充对字符集的支持;扩充二进制及其他应用文件类型的支持。 Web服务器 Web服务器是在主控制平台上运行的软件包,也是...

    英文版<<软件测试>>

    《软件测试》英文版是一部深度探讨软件质量保证的专业著作,涵盖了软件开发过程中的各个关键测试环节。这份资源包含了前十四章的内容,每章都以独立的Word文档形式保存,便于读者逐个研究或查找特定主题。 第一章至...

    互联网软件应用与开发知识.pdf

    《互联网软件应用与开发知识》一文中探讨了互联网软件应用的核心元素,特别是Web服务器、MIME、Web数据库及其工作原理,以及客户机服务器结构。以下是这些知识点的详细说明: 1. **Web服务器**:Web服务器是互联网...

    Android中文API查询和JAVA开发API

    API定义了不同软件组件之间交互的规则和协议。在这个主题中,我们主要关注的是针对Android开发的中文API以及Java开发的中文API。 首先,让我们深入了解一下Java API。JDK_API_1_6_zh_CN.CHM是一个包含Java ...

    QT实现随机生成验证码

    QT是一种跨平台的应用程序开发框架,它被广泛用于创建图形用户界面和其他软件。在QT中实现随机生成验证码是一项常见的任务,通常用于用户登录验证、防止机器人操作等安全场景。验证码的目的是通过要求用户输入随机...

Global site tag (gtag.js) - Google Analytics