计算机字符编码编年史

标签(空格分隔): Java基础


话说字符编码

各种各样的编码标准搞得头大,哪哪分不清。so,想按照字符编码出现的时间顺序做一个梳理。

1.ASCII

 ASCII,American Standard Code for Information Interchange,美国信息交换标准代码.
 由电报码发展而来。

  1. 1963年发布第一版标准
  2. 1967年经历了一次主要修订
  3. 1986年进行了最后一次更新
    至今为止共定义了128个字符;

其中33个字符无法显示,95个可显示的字符

  

ASCII的缺点

ASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数字和英式标点符号,因此只能用于显示现代美国英语

2.ANSI

老美发明计算机,ASCII编码就满足使用了。但是计算机这么好的东西,世界人民都想使用,但是128个字符毛毛雨啊,完全不够用。so,开始各显神通,编码标准进入ANSI阶段

先来介绍下ANSI编码标准所规定的内容包含的含义:

  1. 使用那些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”
  2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”
    接着来看下国内是如何制作编码标准的,前后经历了那些标准?

中国大陆的ANSI

  1. GB 2312-1980
    GB2312发布于1980年,通用于中国大陆,新加坡等地也采用此编码。
  2. GB 13000-1993
    第一次颁布是在1993年
  3. GBK
    《汉字编码扩展规范》(GBK)发布于1995年。GBK与GB 2312兼容。
  4. GB 18030-2000
    国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》,2000年发布
    完全兼容GB 2312,与GBK基本向后兼容,完全支持unicode.
  5. GB 18030-2005
    GB18030-2005《信息技术中文编码字符集》是我国制订的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个

中国港澳台

Big5,1983年发布繁体中文通行区。

3.Unicode

ANSI可谓编码界的战国时代,你搞你的,我搞我的。
中国有GBxxx,Big5
日本有Jis
英文有ASCII
...
不同的字符集标准是不能再多语环境下正常解析的。乱码是个大问题。
so,一个大一统的编码标准应运而生-Unicode
Unicode (万国码、国际码、统一码)。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字

Unicode与 ISO的故事

位于美国加州的Unicode组织允许任何愿意支付会费的公司和个人加入,其成员包含了主要的电脑软硬件厂商,例如Adobe系统、苹果公司、惠普、IBM、微软、施乐等。

20世纪80年代末,组成 Unicode
组织的商业机构,和国际合作的国际标准化组织因为电脑普及和信息国际化的前提下,
分别各自成立了 Unicode 组织[3]和 ISO-10646 工作小组。他们不久便发现对方的存在,大家为着相同的目的而工作。1991 
年,Unicode Consortium 与 ISO/IEC JTC1/SC2 同意保持 Unicode 码表与 ISO 10646 标准保持兼容并密切协调各自标准近一步的扩展。虽然实际上两者的字集编码相同,但
实质上两者确实为两个不同的标准。Unicode 1.1 对应于 ISO 10646-1:1993,Unicode 3.0 对应于 ISO 10646-1:2000,
Unicode 3.2 对应于 ISO 10646-2:2001,Unicode 4.0 对应于 ISO 10646:2003,Unicode 5.0 对应于 ISO 10646:2003

Unicode的问题

Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

比如,汉字的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

4.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式

此外还有 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用

5.总结

几篇文章拼凑着看下来之后,对编码标准大致的有了一个了解。


参考文献
维基百科ASCII
阮一峰的网络日志
维基百科Unicode
国标GBxxxxxx参考百度百科