计算机只认识数字,更准确地说,只认识0和1。可我们每天在键盘上敲出的字母、数字、标点,最终都要变成一串串二进制数才能被机器处理。谁来规定“A”对应哪串0和1?这个规则就是字符编码。ASCII,正是其中最基础、影响最深远的一套方案。

ASCII的全称是“美国信息交换标准代码”,诞生于20世纪60年代。当时不同厂商的计算机各用各的编码,一台机器上的文本换到另一台机器上就可能变成乱码。为了统一,美国国家标准学会制定了这套编码。它用7个二进制位表示一个字符,一共能表示128种状态,对应0到127。

这128个位置被分成了几段。0到31以及127是控制字符,它们不代表可见的符号,而是用来控制设备。比如回车、换行、制表符、响铃、退格。你在键盘上按下Enter键,实际发出的就是一个控制字符。今天很多控制字符已经不再被普通用户直接感知,但它们在通信协议、终端控制和文件格式里仍然存在。

从32开始,是可打印字符。32是空格,随后是标点符号、数字、大写字母、小写字母。数字0到9对应48到57,大写字母A到Z对应65到90,小写字母a到z对应97到122。这个顺序不是随便排的,它让排序和比较变得容易。因为大写字母都排在前面,小写字母都排在后面,字符串比较时“A”会小于“a”。同一个字母的大写和小写相差32,所以只要把大写字母的编码加上32,就能得到对应的小写字母。反过来减去32,就能从小写变成大写。这个简单的换算关系被各种程序沿用了几十年。

ASCII的7位设计在当时够用,因为它只需要覆盖英语世界的基本字符。但计算机传到欧洲、亚洲之后,问题就来了。法语里的重音字母、德语里的变元音、中文的汉字,根本塞不进128个位置。于是各个国家和地区开始扩展ASCII。常见做法是把最高位也利用起来,变成8位编码,多出128个位置,用来放本地字符。比如IBM的代码页437就加入了图形符号和部分欧洲字母,后来又有Latin-1、GB2312、Big5等各自为政的方案。这些扩展编码通常在前128位与ASCII完全一致,只在后128位做文章。这样老系统处理英文文本不会出问题,但不同语言环境之间交换文件,乱码还是难以避免。

进入90年代,Unicode出现了。它试图把世界上所有文字都编入同一套体系,UTF-8成为互联网的主流编码。但UTF-8的一个重要设计原则是向后兼容ASCII:所有ASCII字符在UTF-8中保持完全相同的字节表示。这意味着一份纯英文的ASCII文本,同时也是合法的UTF-8文本,不需要任何转换。这也解释了为什么几十年后,ASCII依然没有被淘汰。它不是被替代,而是被融入了更大的体系。

理解ASCII,本质上是理解计算机如何处理文本的最底层逻辑。它告诉人们,屏幕上看到的每个字符,背后都有一串数字。无论技术如何演进,这套从0到127的对应关系,仍然是整个字符编码世界的地基。