美文网首页JavaScript
字符编码的世界

字符编码的世界

作者: 一曲广陵散 | 来源:发表于2016-05-27 15:33 被阅读60次

    1 摩尔斯电码(1836)

    1837年,世界第一条电报诞生,当时美国科学家莫尔斯尝试用一些“点”和“划”来表示不同的字母、数字和标点符号,这套表示字符的方式也被称为“摩尔斯电码”:
    维基百科:摩尔斯电码

    2 第一台计算机(1946)

    涉及的基础概念

    比特(bit):也可称为“位”,是计算机信息中的最小单位,是 binary digit(二进制数位)的缩写,指二进制中的一位
    字节(Byte):计算机中信息计量的一种单位,一个位就代表“0”或“1”,每8个位(bit)组成一个字节(Byte)
    字符(Character):文字与符号的总称,可以是各个国家的文字、标点符号、图形符号、数字等
    字符集(Character Set):是多个字符的集合
    编码(Encoding): 信息从一种形式或格式转换为另一种形式的过程
    解码(decoding): 编码的逆过程
    字符编码(Character Encoding):按照何种**规则**存储字符
    

    ASCII 第一台计算机使用8个晶体管的通断电表示,可以表示出256种状态 1967年,美国信息交换标准代码(ASCII,American Standard Code for Information Interchange)中包含128种状态,总共包含35个控制字符和95个可显示的字符

    0000 0000 ~ 0001 1111 共 **33** 种状态用来表示终端的特殊动作,
    
    如打印机中的响铃为 0000 0111 ,当打印机遇到 0000 0111 这样的字节传过来时,
    
    打印机就开始响铃;
    
    0010 0000 ~ 0010 1111 、 0011 1010~0110 0000 和 0111 1101 ~ 0111 1110 
    
    共 **33** 种状态来表示英式标点符号,如 0011 1111 即代表英式问号“?”;
    
    0011 0000 ~ 0011 1001 共 **10 **种状态来表示“0~9”10个阿拉伯数字;
    
    0100 0001 ~ 0101 1010 和 0110 0001 ~ 0111 1010共 **52**种状态来表示大小写英文字母;
    

    EASCII 虽然刚开始计算机只在美国使用,128个字符的确是足够了,但随着科技惊人的发展,欧洲国家也开始使用上计算机了。不过128个字符明显不够 EASCII(Extended ASCII,延伸美国标准信息交换码)由此应运而生,EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号


    GB2312 当计算机来到中国后,需要增加字符来表示汉语, 于是中国国家标准总局(现已更名为国家标准化管理委员会)在1981年,正式制订了中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,项目代号为GB 2312 或 GB 2312-80(GB为国标汉语拼音的首字母),此套字符集于当年的5月1日起正式实施。

    包含字符:共包含7445个字符,6763个汉字和682个其他字符(拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母)
    
    存储方式: 基于[EUC存储方式](http://zh.wikipedia.org/wiki/EUC),每个汉字及符号以两个字节来表示,第一个字节为“高位字节”,第二个字节为“低位字节”
    

    BIG5 要知道港澳台同胞使用的是繁体字,而中国大陆制定的GB2312编码并不包含繁体字,于是信息工业策进会在1984年与台湾13家厂商签定“16位个人电脑套装软件合作开发(BIG-5)计划”,并开始编写并推出BIG5标准。 之后推出的倚天中文系统则基于BIG5码,并在台湾地区取得了巨大的成功。在BIG5诞生后,大部分的电脑软件都使用了Big5码,BIG5对于以台湾为核心的亚洲繁体汉字圈产生了久远的影响,以至于后来的window 繁体中文版系统在台湾地区也基于BIG5码进行开发。

    包含字符:
    共收录13,060个汉字及441个符号
    编码方式:
    用两个字节来为每个字符编码,第一个字节称为“高位字节”,第二个字节称为“低位字节”
    

    Unicode 国际标准化组织(ISO)及国际电工委员会(IEC)于1984年联合成立了ISO/IEC小组,主要用于开发统一编码项目; 而Xerox、Apple等软件制造商则于1988年组成了统一码联盟,用于开发统一码项目,但后来他们发现各自在做相同的工作,同时世界上也不需要两个不兼容的字符集,于是两个组织就此合并了双方的工作成果,并为创立一个单一编码表而协同工作 1991年,两个组织共同的工作成果Unicode 1.0正式发布,不过Unicode 1.0并不包含CJK字符(即中日韩)


    ISO/IEC 8859 ISO/IEC小组在1984年成立后的第三年(即**1987年**)开始启动ISO 8859标准的编写,ISO 8859是一系列8位字符集的标准,主要为世界各地的不同语言(除CJK)而单独编写的字符集,一共定义了15个字符集:

    (ISO/IEC 8859-1:西欧语言 ISO/IEC 8859-2  :中欧语言 ISO/IEC 8859-3 :南欧语言 ISO/IEC 8859-4: 北欧语言 ISO/IEC 8859-5: 斯拉夫语
    
    ISO/IEC 8859-6: 阿拉伯语 ISO/IEC 8859-7:希腊语 ISO/IEC 8859-8:希伯来语 ISO/IEC 8859-9:土耳其语
    
    ISO/IEC 8859-10: 北日耳曼语 ISO/IEC 8859-11:泰语 ISO/IEC 8859-13: 波罗的语族 ISO/IEC 8859-14: 凯尔特语族
    
    ISO/IEC 8859-15:西欧语言,收录芬兰语字母和大写法语重音字母,以及欧元(€)符号
    
    ISO/IEC 8859-16 :东南欧语言,主要供罗马尼亚语使用,并加入欧元(€)符号)
    

    ISO/IEC 10646 / UCS 1993年,ISO/IEC 10646标准第一次发表,ISO/IEC 10646是[ISO 646](http://zh.wikipedia.org/wiki/ISO_646)的扩展,定义了1个31位的字符集。ISO 10646标准中定义的字符集为UCS,UCS是Universal Character Set的缩写,中文译作通用字符集 版本: ISO/IEC 10646-1:第一次发表于1993年,现在的公开版本是2000年发表的ISO/IEC 10646-1:2000。 ISO/IEC 10646-2:在2001年发表 包含字符: 最初的ISO 10646-1:1993的编码标准,即Unicode 1.1,收录中国大陆、台湾、日本及韩国通用字符集的汉字共计20,902个,当然每个版本的Unicode标准的字符集所包含的字符数不尽相同,UCS包含了已知语言的所有字符,除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的方块文字,此外还包括了大量的图形、印刷、数学、科学符号。 UCS给每个字符分配一个唯一的代码,并且赋予了一个正式的名字,通常在表示一个Unicode值的十六进制数的前面加上“U+”,例如“U+0041”代表字符“A 编码方案: UCS仅仅是一个超大的字符集,关于UCS制定的编码方案有两种:**UCS-2**和**UCS-4**,Unicode默认以UCS-2编码。 顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。那么UCS-2其实可以容纳的字符数为65536(2的16次方),而UCS-4可以容纳的字符数为2147483648(2的31次方)


    UTF Unicode 诞生,随之而来的计算机网络也发展了起来,Unicode 如何在网络上传输也是一个必须考虑的问题,于是在1992年,面向网络传输的UTF标准出现了。 UTF是**U**nicode **T**ransformation **F**ormat的缩写,中文译作Unicode转换格式。其实我们从现在可以把Unicode看作是一个标准或组织,而UCS就是一个字符集,那么UCS在网络中的传输标准就是UTF了。 前面提到了UCS的编码实现方式为UCS-2和UCS-4,即要么是每个字符为2个字节,要么是4个字节。如果一个仅包含基本7位ASCII字符的Unicode文件,每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0,这就造成了比较大的浪费。但是,聪明的人们发明了UTF-8,UTF-8采用可变字节编码,这样可以大大节省带宽,并增加网络传输效率。

    UTF-8:
    
    使用1~4个字节为每个UCS中的字符编码:
    
    128个ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)
    
    拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母需要二个字节编码(Unicode范围由U+0080至U+07FF)
    
    大部分国家的常用字(包括中文)使用三个字节编码
    
    其他极少使用的生僻字符使用四字节编码
    
    UTF-16/UCS-2:
    
    UCS-2的父集,使用2个或4个字节来为每个UCS中的字符编码:
    
    128个ASCII字符需两个字节编码
    
    其他字符使用四个字节编码
    
    UTF-32/UCS-4:
    
    等同于UCS-4,对于所有字符都使用四个字节来编码
    

    GB13000 前面提到了Unicode的迅速发展,至1993年时,包含CJK的Unicode 1.1已经发布了于是在同一年,中国制定了几乎等同于Unicode1.1的GB13000.1-93国家编码标准(简称GB13000)。此标准等同于 *ISO/IEC 10646.1:1993和Unicode 1.1 GBK 1995年,在GB13000诞生后不久,中国教育科研网(NCFC)与美国NCFnet直接联网,这一天是中国被国际承认为开始有网际网路的时间。中国是一个十几亿人口的大国,微软意识到了中国是一个巨大的市场,当时的微软也将自己的操作系统市场布局进中国,进入中国随之而来要解决的就是系统的编码兼容问题。 之前的国家编码标准GB 2312,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁体字,GB 2312不能处理,因此微软利用了GB2312中未使用的编码空间,收录了GB13000中的所有字符制定了汉字内码扩展规范**GBK**(K为汉语拼音 Kuo Zhan中“扩”字的首字母)。所以这一关系其实是大陆把Unicode1.1借鉴过来改名为了GB13000,而微软则利用GB2312中未使用的编码空间收录GB13000制定了GBK。所以GBK是向下完全兼容GB2312的。

    包含字符:
    
    共收录21886个字符, 其中汉字21003个, 字符883个
    
    编码方式:
    
    GBK只不过是把GB2312中未使用的空间,编码了其他字符,所以GBK同样是用两个字节为每个字符进行编码
    

    GB18030 GB18030不仅包含了大部分的汉字和繁体字等,而且包含了少数民族的文字,在2000年,电子工业标准化研究所起草了GB18030标准,项目代号GB 18030-2000,全称《信息技术-信息交换用汉字编码字符集-基本集的扩充》**。此标准推出后,在中国的所售产品必须强制支持GB18030标准

    GB 18030-2000
    GB 18030-2005
    
    包含字符:
    
    GB18030收录了GBK中的所有字符,并将Unicode中其他中文字符(少数民族文字、偏僻字)也一并收录进来重新编码。其中GB 18030-2000共收录27533个汉字,
    
    而 GB 18030-2005共包含70244个汉字。
    
    编码方式:
    
    采用多字节编码,每个字符由1或2或4个字节进行编码
    

    相关文章

      网友评论

        本文标题:字符编码的世界

        本文链接:https://www.haomeiwen.com/subject/ieoxdttx.html