*础知识计算机中储存的信息都是用二进制数表示的而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说按照何种规则将字符存储在计算机中如a用什么表示称为编码反之将存储在计算机中的二进制数解析显示出来称为解码如同密码学中的加密和解密。在解码过程中如果使用了错误的解码规则则导致a解析成b或者乱码。字符集Charset是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称包括各国家文字、标点符号、图形符号、数字等。字符编码Character Encoding是一套法则使用该法则能够对自然语言的字符的一个集合如字母表或音节表与其他东西的一个集合如号码或电脉冲进行配对。即在符号集合与数字系统之间建立对应关系它是信息处理的一项*本技术。通常人们用符号集合一般情况下就是文字来表达信息。而以计算机为*础的信息处理系统则是利用元件硬件不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字因此字符编码就是将符号转换为计算机可以接受的数字系统的数称为数字代码。2.常用字符集和字符编码常见字符集名称ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字需要进行字符编码以便计算机能够识别和存储各种文字。2.1. ASCII字符集编码ASCIIAmericanStandardCode forInformationInterchange美国信息交换标准代码是*于拉丁字母的一套电脑编码系统。它主要用于显示现代英语而其扩展版本EASCII则可以勉强显示其他西欧语言。它是现今最通用的单字节编码系统但是有被Unicode追上的迹象并等同于国际标准ISO/IEC 646。ASCII字符集主要包括控制字符回车键、退格、换行键等可显示字符英文大小写字符、阿拉伯数字和西文符号。ASCII编码将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位bits表示一个字符共128字符但是7位编码的字符集只能支持128个字符为了表示更多的欧洲常用字符对ASCII进行了扩展ASCII扩展字符集使用8位bits表示一个字符共256字符。ASCII字符集映射到数字编码规则如下图所示图1 ASCII编码表图2 扩展ASCII编码表ASCII的最大缺点是只能显示26个*本拉丁字母、阿拉伯数目字和英式标点符号因此只能用于显示现代美国英语而且在处理英语当中的外来词如naïve、café、élite等等时所有重音符号都不得不去掉即使这样做会违反拼写规则。而EASCII虽然解决了部份西欧语言的显示问题但对更多其他语言依然无能为力。因此现在的苹果电脑已经抛弃ASCII而转用Unicode。2.2. GBXXXX字符集编码计算机发明之处及后面很长一段时间只用应用于美国及西方一些发达国家ASCII能够很好满足用户的需求。但是当天朝也有了计算机之后为了显示中文必须设计一套编码规则用于将汉字转换为计算机可以接受的数字系统的数。天朝专家把那些127号之后的奇异符号们即EASCII取消掉规定一个小于127的字符的意义与原来相同但两个大于127的字符连在一起时就表示一个汉字前面的一个字节他称之为高字节从0xA1用到 0xF7后面一个字节低字节从0xA1到0xFE这样我们就可以组合出大约7000多个简体汉字了。在这些编码里还把数学符号、罗马希腊的 字母、日文的假名们都编进去了连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码这就是常说的全角字符而原来在127号以下的那些就叫半角字符了。上述编码规则就是GB2312。GB2312或GB2312-80是中国国家标准简体中文字符集全称《信息交换用汉字编码字符集·*本集》又称GB0由中国国家标准总局发布1981年5月1日实施。GB2312编码通行于中国大陆新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。GB2312的出现*本满足了汉字的计算机处理需要它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字GB2312不能处理这导致了后来GBK及GB 18030汉字字符集的出现。下图是GB2312编码的开始部分由于其非常庞大只列举开始部分具体可查看GB2312简体中文编码表图3 GB2312编码表的开始部分由于GB 2312-80只收录6763个汉字有不少汉字如部分在GB 2312-80推出以后才简化的汉字如啰部分人名用字如中国前总理***的*字台湾及香港使用的繁体字日语及朝鲜语汉字等并未有收录在内。于是厂商微软利用GB 2312-80未使用的编码空间收录GB 13000.1-93全部字符制定了GBK编码。根据微软资料GBK是对GB2312-80的扩展也就是CP936字码表 (Code Page 936)的扩展之前CP936和GB 2312-80一模一样最早实现于Windows 95简体中文版。虽然GBK收录GB 13000.1-93的全部字符但编码方式并不相同。GBK自身并非国家标准只是曾由国家技术监督局标准化司、电子工业部科技与质量监督司公布为技术规范指导性文件。原始GB13000一直未被业界采用后续国家标准GB18030技术上兼容GBK而非GB13000。GB 18030全称国家标准GB 18030-2005《信息技术 中文编码字符集》是中华人民共和国现时最新的内码字集是GB 18030-2000《信息技术 信息交换用汉字编码字符集 *本集的扩充》的修订版。与GB 2312-1980完全兼容与GBK*本兼容支持GB 13000及Unicode的全部统一汉字共收录汉字70244个。GB 18030主要有以下特点与UTF-8相同采用多字节编码每个字可以由1个、2个或4个字节组成。编码空间庞大最多可定义161万个字符。支持中国国内少数民族的文字不需要动用造字区。汉字收录范围包含繁体汉字以及日韩汉字图4 GB18030编码总体结构本规格的初版使中华人民共和国信息产业部电子工业标准化研究所起草由国家质量技术监督局于2000年3月17日发布。现行版本为国家质量监督检验总局和中国国家标准化管理委员会于2005年11月8日发布2006年5月1日实施。此规格为在中国境内所有软件产品支持的强制规格。2.3. BIG5字符集编码Big5又称为大五码或五大码是使用繁体中文正体中文社区中最常用的电脑汉字字符集标准共收录13,060个汉字。中文码分为内码及交换码两类Big5属中文内码知名的中文交换码有CCCII、CNS11643。Big5虽普及于台湾、香港与澳门等繁体中文通行区但长期以来并非当地的国家标准而只是业界标准。倚天中文系统、Windows等主要系统的字符集都是以Big5为*准但厂商又各自增加不同的造字与造字区派生成多种不同版本。2003年Big5被收录到CNS11643中文标准交换码的附录当中取得了较正式的地位。这个最新版本被称为Big5-2003。Big5码是一套双字节字符集使用了双八码存储方法以两个字节来安放一个字。第一个字节称为高位字节第二个字节称为低位字节。高位字节使用了0x81-0xFE低位字节使用了0x40-0x7E及0xA1-0xFE。在Big5的分区中0x8140-0xA0FE保留给用户自定义字符造字区0xA140-0xA3BF标点符号、希腊字母及特殊符号包括在0xA259-0xA261安放了九个计量用汉字兙兛兞兝兡兣嗧瓩糎。0xA3C0-0xA3FE保留。此区没有开放作造字区用。0xA440-0xC67E常用汉字先按笔划再按部首排序。0xC6A1-0xC8FE保留给用户自定义字符造字区0xC940-0xF9D5次常用汉字亦是先按笔划再按部首排序。0xF9D6-0xFEFE保留给用户自定义字符造字区