刨根究底字符编码之三——字符编码的由来

字符编码的由来

 

 

1、为何须要对字符进行编码算法

1.编码

计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还能够作更多的事,例如文本处理。spa

但计算机其实挺笨的,它只“认识”010110111000…这样由0和1两个数字组成的二进制数字,这是由于计算机的底层硬件实现就是用电路的开和闭两种状态来表示0和1两个数字的。所以,计算机只能够直接存储和处理二进制数字。操作系统

2.设计

为了在计算机上也能表示、存储和处理像文字、符号等等之类的字符,就必须将这些字符转换成二进制数字。code

固然,确定不是咱们想怎么转换就怎么转换,不然就会形成同一段二进制数字在不一样计算机上显示出来的字符不同的状况,所以必须得定一个统一的、标准的转换规则。orm

 

2、EBCDIC码与ASCII码blog

1.ci

因而最开始出现了EBCDIC(Extended Binary Coded Decimal Interchange Code扩展二进制编码的十进制交换码)编码标准。EBCDIC码是由国际商用机器公司(IBM)为大型机操做系统而开发设计的,于1964年推出。开发

在EBCDIC码中,英文字母不是连续排列的,中间出现屡次断续,这带来了一些困扰和麻烦。

所以,在后来IBM的我的计算机和工做站操做系统中并无采用EBCDIC码,而是采用了晚于EBCDIC码推出、且后来成为了英文字符编码工业标准的ASCII编码方案。

EBCDIC编码表

2.

ASCII码(American Standard Code for Information Interchange美国信息交换标准码),由美国国家标准学会ANSI(American National Standard Institute)于1968年正式制定。后又于1972年被ISO/IEC采用,制定为ISO/IEC 646标准(ISO,即国际标准化组织International Standardization Organization,成立于1946年;IEC,即国际电工技术委员会International Electrotechnical Commission,成立于1906年;ISO/IEC每每用来表示由这两大国际组织联合制定的标准)。

因为ASCII码要晚于EBCDIC码出现(网上也有文章说是ASCII码要早于EBCDIC码开始设计,但1968年ASCII码才正式肯定为标准),ASCII码的编码方式参照了EBCDIC码,并吸收了其经验教训,将英文字母进行了连续排列,这方便了程序处理。

3.

ASCII编码方案虽然不是最先出现的字符编码方案,但倒是最基础、最重要、应用最普遍的字符编码方案。

目前所通行的其余字符编码方案,好比ISO-885九、GB系列(GB23十二、GBK、GB18030、GB13000)、Big五、Unicode等等,均直接或间接兼容ASCII码。

而像EBCDIC这样与ASCII彻底不兼容的编码方案,基本上处于已淘汰或将要淘汰的境地。

 

3、ASCII字符编码方案介绍

1.

ASCII码使用七个二进制数字(bit比特、位)来表示一个字符,总共表示128个字符(2^7 = 128,二进制编码为0000 0000 ~ 0111 1111,对应的十进制就是0~127)。

因为我的计算机广泛采用8位一个字节来进行存取与处理,所以剩下最高位的那1比特通常为0,但有时也被用做一些通信系统的奇偶校验位。


  ASCII编码表

2.

ASCII字符集共计有128个字符(见上表),码点编号(即字符编号)从0到127(二进制为从0000 0000到0111 1111,十六进制为从0x00到0x7F),二进制最高位都是0。其中:

1)0~31:控制字符或通信专用字符(不可显示不可打印字符),如0x07(BEL响铃)会让计算机发出哔的一声、0x00(NUL空,注意不是空格)一般用于指示字符串的结束、0x0D(CR回车)和0x0A(LF换行)用于指示打印机的打印针头退到行首(即回车)并移到下一行(即换行)等。

2)32~126:可显示可打印字符(其中32为可显示但不可打印的空格字符),48~57为0-9的阿拉伯数字,65~90为26个大写英文字母,97~122为26个小写英文字母,其他的是一些标点符号、运算符号等。

3)127:控制字符DEL。

3.

这时候的字符编解码很是简单,好比若要将字符序列编码为二进制流写入存储设备,只须要将该字符序列里的各个字符在ASCII字符集中的字符编号(即码点编号),直接以一个二进制字节写入存储设备便可,字符编号就是字符编码,中间不须要通过特别的编码算法进行字符编号到字符编码的转换计算,更不存在所谓码元序列到字节序列的转换。