编码字符的发展史

原文链接

  1. 鼻祖,ascii,7位(bit)范围128

    计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。

  2. 随之出现扩展ascii,8位范围256

    后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。于是又扩展了ASCII的定义,使用一个字节的全部8位(bit)来表示字符了,这就叫扩展ASCII码。范围是0x00 - 0xFF 共256个字符。

  3. 中国最早出现gb-2312,支持中文

    中国人利用连续2个扩展ASCII码的扩展区域(0xA0以后)来表示一个汉字,该方法的标准叫GB-2312。后来,日文、韩文、阿拉伯文、台湾繁体(BIG-5)……都使用类似的方法扩展了本地字符集的定义,现在统一称为 MBCS 字符集(多字节字符集)。这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此使用GB-2312的软件,就不能在BIG-5的环境下运行(显示乱码),反之亦然。

  4. 随之出现gbk,扩展的gb-2312,包含复杂中文和繁体

    使用gb-2312一段时间后,我们很快就就发现有许多人的人名没有办法在这里打出来,中国汉字真乃博大精深。于是我们不得不继续把GB2312 没有用到的码位找出来老实不客气地用上。后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

  5. 进一步扩展GB18030,全中国用

    后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。 中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。

  6. 统一全球,出现unicode标准字符集 统一规定2字节=1字符

    之后全世界各个国家都有自己的编码标准,导致国家与国家之间的编码转换很有问题。为了把全世界人民所有的所有的文字符号都统一进行编码,于是一个叫 ISO (国际标谁化组织)的国际组织制定了”Universal Multiple-ctet Coded Character Set”,简称 UCS, 俗称 “unicode“。UNICODE 使用2个字节表示一个字符,对于ASCII里的那些英文“半角”字符,其原编码不变,只是将其长度由原来的8位扩展为16位,高位补0.而其他文化和语言的字符则全部重新统一编码。这种大气的方案在保存英文文本时会多浪费一倍的空间。这下终于好啦,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。虽然我用 IE 浏览日本网站,显示出我不认识的日文文字,但至少不会是乱码了。UNICODE 的范围是 0x0000 - 0xFFFF 共6万多个字符,其中光汉字就占用了4万多个

  7. UTF-8的出现

    由于字节浪费和unicode与ascii的区别,unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多UTF(UCS Transfer Format)标准出现了,顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。它是一种变长的编码方式,它可以使用1~4个字节表示一个符号。注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。

常用字符集

字符集 位数 范围 个数 作用
ASCII 7 00-7F 128 表语英语及西欧语言
ASCII扩展 8 00-FF 256 表语英语及西欧语言
ISO-8859-1 8 00-FF 256 扩展ASCII,表示西欧、希腊语等
GB2312 16 高0xA1–0xF7低0xA1–0xFE 7445个符号,包括6763个汉字 国家简体中文字符集,兼容ASCII
BIG5 16 高0x81-0xFE低0x40-0x7E、0xA1-0xFE 13053个汉字 统一繁体字编码
GBK 16 高0x81-0xFE低0x40-0xFE 21886个字符 它是GB2312的扩展,加入对繁体字的支持,兼容GB2312
GB18030 8/16/32 解决了中文、日文、朝鲜语等的编码,兼容GBK
UCS 16/32 国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容
Unicode 分别是UTF-8,UTF-16和UTF-32 为世界650种语言进行统一编码,兼容ISO-8859-1