从ASCII到UTF-8——编码格式的发展概述

编码格式的演进

ASCII

当计算机发明之初就确定了以二进制方式存储数据的逻辑,如何将文字和控制信息与二进制数字对应起来是一个需要解决的问题。比如英文字母有26个,如何用计算机表示a、b、c?必须有一个标准来规定,才不会造成混乱。
于是美国国家标准学会 (American National Standard Institute, 简称ANSI)在1963年就做了这么一件让美国人统一意见的事儿,它出台了ASCII编码规范。就是我们把用到的文字和控制信息都用8个二进制数字(也就是一个字节)来表示,比如,英文字母a我们用01100001表示,英文字母A我们用01000001表示,数字0我们用00110000表示。但是可能是美国人文字比较少,ASCII虽然使用八位二进制数字来编码,但是实际只用到了7位,最高位都是0,也就是说,本来八位能表示28 = 256种信息,没有利用完,只规定了27 = 128种信息。
ASCII编码规定前32个(00000000到00011111,十进制表示为0到31)以及01111111(十进制表示为127)共33种二进制数字排列表示控制字符或通信专用字符,其余95个表示可显示字符,我们如今在编程中依然会用到。

字符 十进制表示
0到9 48到57
A到Z 65到90
a到z 97到122

后来计算机传到了欧洲,但是由于欧洲很多国家用到的字符除了美国人定义的那些以外,还有很多拉丁字母等字符,比如法语中,字母上方有注音符号。怎么办呢?

EASCII和ISO/IEC 8859系列

  • EASCII
    ASCII码不是8位只用了7位么?把剩下的没有使用的空间存储欧洲人的字符不就行了?于是当时出现了两种方案,一个是EASCII(Extended ASCII)编码方案,一个是ISO/IEC 8859字符编码方案。
    EASCII从名字上就能看出了,是ASCII的扩充。它将8位二进制字符可以表示的128到255利用上了,0到127依旧是保留ASCII的。但是EASCII目前已经很少使用了。

  • ISO/IEC 8859系列
    ISO/IEC 8859系列是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位元字符集的标准,到现在一共定义了15个字符集。ISO/IEC 8859系列也是完全兼容ASCII的,其实也是ASCII的扩充,0到127和ASCII相同,128到159这32个编码未定义字符,160到255这96个编码定义了字符。ISO/IEC 8859系列共有15个字符集,所主要表示的字符如下表:

    字符集名称 表示语言
    ISO/IEC 8859-1(Latin-1) 西欧语言
    ISO/IEC 8859-2(Latin-2) 中欧语言
    ISO/IEC 8859-3(Latin-3) 南欧语言
    ISO/IEC 8859-4(Latin-4) 北欧语言
    ISO/IEC 8859-5(Cyrillic) 斯拉夫语言
    ISO/IEC 8859-6(Arabic) 阿拉伯语
    ISO/IEC 8859-7(Greek) 希腊语
    ISO/IEC 8859-8(Hebrew) 希伯来语
    ISO/IEC 8859-9(Latin-5或Turkish) 把Latin-1的冰岛语字母换走,加入土耳其语字母
    ISO/IEC 8859-10(Latin-6或Nordic) 北日耳曼语支
    ISO/IEC 8859-11(Thai) 泰语
    ISO/IEC 8859-13(Latin-7) 波罗的语族
    ISO/IEC 8859-14(Latin-8) 凯尔特语族
    ISO/IEC 8859-15(Latin-9) 西欧语言
    ISO/IEC 8859-16(Latin-10) 罗马尼亚语

    此系列没有-12,因为其被搁置了。

GB2312、GBK、GB18030

计算机传到中国后,我们发现,一开始约定的8位表示一个字符的编码方式到中国根本不够用!为什么?其他不说,常用的汉字都有好几千个,而8位最多表示256个字符,怎么办?

  • GB2312
    1980年中国国家标准总局发布,并在1981年实施了一套国家标准,标准号为GB2312-1980,也就是GB2312编码方案,就是为了解决汉字编码问题。一个字节不是存不下么,那咱们用两个字节。前一个称为高字节,后一个称为低字节,为了避免和ASCII编码冲突,规定一个字节的值如果小于等于127,那么它表示的意义和ASCII相同。如果两个大于127的字节连在一起则表示一个汉字。
    GB2312一共收录了6763个汉字,以及拉丁字母,希腊字母,日文平假名,日文片假名,俄语西里尔字母在内的682个字符。在这682个字符中包括了ASCII本身就有的数字、标点、字母等字符,所以为了区分,ASCII中本来就有的我们成为半角字符,与其对应在这682个字符中的我们叫做全角字符。也就是说半角是一个字节表示的,全角是两个字节表示的。
  • GBK
    虽然GB2312已经差不多够用了,但是有些罕见字,生僻字,GB2312还是不够,于是在1995年,全国信息技术标准化技术委员会发布了《汉字内码扩展规范(GBK)》,即对GB2312-1980进行了扩展。但是GBK的编码方式与GB2312不同,虽然它们都是双字节编码,但是GBK放宽了要求,即只需高字节大于127就固定表示是一个汉字的开始,低字节不需要大于127了,也正因为这样,GBK才能收录更多的字符。
    GB2312双字节所能表示的:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值