电脑里根本没有字,你打的字去哪了?
字符编码:美国信息交换标准代码(American Standard Code for Information Interchange,ASCII)
电脑里,一个字都没有
你打字的时候——不管是发消息,还是打拼音——手指敲的是键盘上一个个字母。敲下一个 A,屏幕上就亮出一个 A。看起来,这个 A 是被"装"进电脑里了。
可上次我们钻进电脑里看过:里面只有几十亿个开关,每个只有通电、断电两种状态。开关能拼出数字,这你已经亲手玩过了。但开关拼不出"字"——A 不是数字,它没法用加法凑出来。
那字是怎么进去的?人们想了一个特别简单的办法:给每个字母发一个编号。 字母变成编号,编号再变成 0 和 1——两步,文字就进去了。
第二步你上次已经学会了。所以今天真正的新东西只有一个:那张编号表。
你敲下的 A,其实是 65
在这张表里,A 的编号是 65。65 用开关怎么拼,你自己就能拨出来:八个开关,扳开代表 64 和代表 1 的那两个,64 加 1,正好 65。写下来就是:
0 1 0 0 0 0 0 1
不用光听我说——上次那个拼数字的游戏还开着:0 和 1 拼数字。你可以进去扳开那两个开关,看看数字是不是正好跳到 65。
所以你敲下 A 的那一刻,真正发生的事是:这个字被换成了编号 65,存下来的是 01000001。你把消息发给朋友,电脑发出去的就是这串 0 和 1。对面的电脑收到它,翻出同一张表,一查:65?是 A。这才在屏幕上画出一个 A 来。
注意一件要紧的事:那串 0 和 1 里,并没有藏着一个"A"。 同一串 01000001,你当数字读,它是 65;查了表读,它才是 A。意义不在 0 和 1 里——在那张大家共用的表上。
凭什么 A 偏偏是 65?
你可能想问:为什么是 65?这里面有什么道理吗?没有。真的没有。
这就像你和好朋友约暗号:"咳嗽一声,就是快跑。"咳嗽和快跑之间有道理吗?没有,约好了,它就管用。A 和 65 也一样——是人定的,不是算出来的。只有一处不一样:暗号就怕别人知道,这张表恰恰相反,巴不得人人都用它。
而且暗号有一个命门:得两边记的是同一份。 要是你的朋友把暗号记成了"咳嗽一声,就是蹲下",那你一咳嗽,就要出事了。
编号表也一样。你这边的表上,65 是 A;要是对面那张表上,65 是别的字呢?你发过去一句话,他收到的就是一堆认不得的字——你可能见过这种样子,它有个名字,叫乱码。
各用各的表,鸡同鸭讲的年代
这不是编出来吓你的,是真发生过的事。六十多年前,IBM、尤尼瓦克(UNIVAC)这些造电脑的公司,各造各的表,加起来有六十多种。这家的机器存了一封信,搬到那家的机器上,读出来就是满屏乱码。机器越造越多,人们又开始把电脑连起来传东西——这个麻烦,再也躲不过去了。
1961 年 5 月,IBM 有一位叫鲍勃·贝默的美国工程师,带头提议:别各玩各的了,大家坐下来,定一张公用的表。他把提案交给了管全美国定标准的机构——美国标准协会。
于是协会出面,把各家公司的代表召到一起,组了一个委员会。你猜他们吵了多久?两年多。 吵的内容,差不多就是"我家机器上的字和符号,必须给它留个格子"。定一张表不难,难的是让所有人点头。
吵了两年多,吵出一张 128 格的表
1963 年 6 月 17 日,美国标准协会正式通过:表,定下来了。一共 128 个格子,装下了英文字母、数字 0 到 9、标点符号,还有三十来个格子装的不是字,是"动作"——比如"换一行"。你每次按回车键,发出的就是表里的这样一个编号。
这张表有自己的名字:ASCII,读起来像"阿斯克码",英文叫 American Standard Code for Information Interchange,中文叫美国信息交换标准代码。上次我们提过一嘴的,就是它。
表排得很讲究。字母按 ABC 的顺序挨个排:A 是 65,B 是 66,C 是 67……你可以自己推推看,Z 是多少。后来补进小写字母的时候,人们还留了一手:大写变小写,编号正好加 32——用开关说,就是只多扳开一个开关。A 是 01000001,a 就是 01100001;B 是 01000010,b 就是 01100010;C 是 01000011,c 就是 01100011。你找找看,是不是每一对都只差同一位。
1968 年,这张表惊动了美国总统:约翰逊签了一道命令,政府的电脑,必须用 ASCII。一张表,成了国家级的约定。
不过老实说,它也不是一夜之间赢的。最不着急换表的,恰恰是 IBM——带头提议的贝默就是他家的工程师,可 IBM 的大机器还是接着用自家那张老表,一用又是十几年。直到 1981 年,IBM 造出自己的第一台个人电脑,这台新机器,终于用上了 ASCII。约定这种东西,定下来只是开头,让大家真的用起来,往往要更多年。
这张表定下来之后,真的被画成了一张图,六十多年过去,还是这个样子:

字母挨个排、控制格挤在最左边、大写小写隔两列——跟你刚刚看到的一模一样。这是六十多年前定下来的原图,现在世界各地的教科书上印的,还是它。
这张表,今天还在你手机里
从那以后,文字进电脑,走的就是这两步:查表变编号,编号变 0 和 1。这套办法有个正式的名字,叫字符编码——字母、数字、标点,在表里统称字符。
六十多年过去,你今天发的消息、打开的网页,最底下用的还是这张表和它的后代。当年那群人吵了两年多吵出来的东西,全世界的机器今天还在一天到晚地用。
可你肯定已经想到了:128 个格子,装英文够了——汉字呢? 汉字有几万个,这张小表根本装不下。汉字确实也有编号,那张表比这张厚得多。几万个字怎么编号、怎么塞进 0 和 1,又是一群聪明人想出的巧办法。——那就是我们下次,要一起拆开看的事了。