字符编码及其由来
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符编码及由来
本文概述:本文从编码的发展历程开始,介绍了ASCII、ASCII扩展字符集、GB2312、GBK、GB18030和BIG5,以及统一编码规范之后的Unicode、UCS2、UCS4、UTF8、UTF16、UTF32、Little Endian和BigEndian。
(1)ANSI的“ASCII”编码(American Standard Code for Information Interchange,美国信息互换标准代码)0~127,用来存储空格、标点符号、数字、大小写字母。ASCII 中128~255称为扩展字符集。
(2)GB2312(对ASCII的中文扩展):
GB2312 收录简化汉字及符号、字母、日文假名等共7445 个图形字符,其中汉字占6763 个。
编码规定:
其编码范围为:2121H-777EH。一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(高字节)从0XA1用到0XFE,大约组合出7000多个简体汉字,其中包括数学符号、罗马希腊的字母和日本的假名。且ASCII 里原本有的数字、标点、字母都重新编了两个字节长的编码,这就是常说的“全角”,而原来在127一下的那些字符就叫“半角”字符。
GB2312 将代码表分为94 个区,对应第一字节;每个区94 个位,对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09 区为符号、数字区,16-87 区为汉字区,10-15 区、88-94 区是有待进一步标准化的空白区。GB2312 将收录的汉字分成两级:第一级是常用汉字计3755 个,置于16-55 区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008 个,置于56-87 区,按部首/笔画顺序排列。故而GB2312最多能表示6763 个汉字。
(3)GBK:
为满足所有汉字的需求,不再要求低字节一定是127号之后的内码,只要第一个字节大于127就固定表示这是一个汉字的开始。GBK包括了GB2312的所有的内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。
GBK 向下与GB2312 完全兼容,向上支持ISO 10646 国际标准。GBK 亦采用双字节表示,总体编码范围为8140-FEFE 之间,首字节在81-FE 之间,尾字节在40-FE 之间,剔除XX7F 一条线。
(4)GB18030:
GBK的扩展,增加了几千个新的少数民族的字。
以上统称为DBCS(Double Byte Character 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此在程序中为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值大于127,则认为一个双字节字符集的字符出现了。
GB18030 是最新的汉字编码字符集国家标准, 向下兼容GBK 和GB2312 标准。GB18030 编码是一二四字节变长编码。一字节部分从0x0~0x7F 与ASCII 编码兼容,二字节部分。首字节从0x81~0xFE, 尾字节从0x40~0x7E 以及0x80~0xFE, 与GBK 标准基本兼容。四字节部分,第一字节从0x81~0xFE, 第二字节从0x30~0x39, 第三和第四字节的范围和前两个字节分别相同。四字节部分覆盖了从0x0080 开始, 除去二字节部分已经覆盖的所有Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到了与Unicode 标准一一对应,这一点与UTF-8 编码类似。现在的PC 平台必须支持GB18030,手机、MP3 一般只支持GB2312。
(5)BIG5:
BIG5 是通行于台湾、香港地区的一个繁体字编码方案。广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标准。
BIG5 码是双字节编码方案,其中第一个字节的值在OXAO-OXFE 之间,第二个字节在OX40-OX7E 和OXA1-OXFE 之间。
(6)UniCode:
为了统一全世界的编码规范,ISO(国际标准化组织)废除所有地区性编码方案,重新制定一个了统一的编码——Universal Multiple_OctetCoded Character Set,简称UCS,俗称“UniCode”。
ISO规定,用16位统一表示所有的字符,对于ASCII里的那些“半角”字符,UNICODE 保持其原编码不变,只是将其长度由原来的8位扩展为16位,而其它文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高8位永远是0,因此这种案在保存英文文本时会多浪费一倍的空间。
(7)UCS-2和UCS-4:
Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成U+ABCD 的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为U+0000~U+FFFF。
为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是一样的。
要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。
(8)UTF:
随着计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF