ASCII 表:128 个数字如何成为文本的基石
ASCII 是美国信息交换标准代码(American Standard Code for Information Interchange)的缩写,是教会计算机就"一个字母是什么"达成一致的编码。它于 1963 年发布并在整个 1960 年代得到完善,将英文文本的每个基本字符、数字以及少数控制信号映射到机器可以存储和传输的数字上。当你按下大写字母 A 的键时,你的计算机存储的不是一个形状,而是数字 65。ASCII 就是那张查找表,让这个数字无论传到哪里都意味着 A。
这个标准以紧凑著称。ASCII 是一种 7 位编码,这意味着每个字符都能装进七个二进制位,整个字符集恰好横跨 2 的 7 次方,即 128 个不同的码位,编号从 0 到 127。这种节省是有意为之的。早期的电传打字机和调制解调器又慢又贵,所以每一位都很宝贵。七位足以涵盖大小写拉丁字母、十个数字、常用标点,以及让设备保持同步的信号字符,还剩下一位,许多系统用它来做差错校验。

两半:控制字符与可打印字符
该表清晰地分为两个区域。码 0 到 31,加上码 127(DEL),是控制字符。它们不会在屏幕上打印出字形。相反,它们指示设备去做某件事:码 9 是水平制表符,码 10 是换行符(移动到新的一行),码 13 是回车符,码 7 则是曾经让终端发出可听见叮当声的响铃。这类信号码总共有三十三个,尽管许多如今已成为历史趣闻,但换行、回车和制表符在今天文本文件的格式化中仍然不可或缺。
码 32 到 126 是可打印字符,总共九十五个。码 32 是空格,它算作可打印字符,因为它会推进光标,尽管它什么也不显示。从这里开始,你会看到标点和符号,码 48 到 57 的数字 0 到 9,码 65 到 90 的大写字母 A 到 Z,以及码 97 到 122 的小写字母 a 到 z。从这种布局中得出一个巧妙的特性:同一字母的小写和大写版本恰好相差 32,这就是为什么翻转一个位就能转换大小写。这些规律并非偶然,它们是经过设计的,以便排序和大小写转换可以用简单的算术完成。
十进制、十六进制和二进制:同一个数字的三种视角
每个 ASCII 码都只是一个数字,而你会看到它以三种方式书写。十进制是日常的十进制形式,所以 A 是 65。十六进制(16 进制)是程序员常用的形式,因为它与字节对齐:A 是 0x41,可打印范围从 0x20 到 0x7E。二进制(2 进制)是硬件实际存储的形式,所以 A 在其七个位上是 1000001。同一个字符,三种记法,能够熟练地在它们之间转换,是你阅读内存转储或网络流量时的一项核心技能。如果你经常处理这些转换,speedor.net 上更广泛的参考表能让这些映射触手可及。

ASCII 在哪里依然重要
把 ASCII 归入历史是一个错误。它在任何接触代码的人的日常工作中都活跃着。编程语言在字节层面把字符串字面量、源文件和协议关键字当作 ASCII 处理。诸如 HTTP 头、SMTP 以及许多配置格式之类的网络协议都以 ASCII 定义,从而保持人类可读。当一个字符串看起来损坏时,开发者会拿出十六进制查看器,对照 ASCII 表读取原始字节,以发现一个杂散的控制字符或一个错误的行结尾。URL 编码、Base64 和转义序列全都建立在 ASCII 值之上。对于任何调试编码错误的人来说,在你的开发者工具旁放一份速查表,能把一个神秘的字节变成一个显而易见的答案。
从 ASCII 到 Unicode 和 UTF-8
ASCII 出色地处理了英文,却几乎处理不了别的。128 个字符的上限容纳不下带重音的字母、西里尔文、中文、阿拉伯文或表情符号。Unicode 解决了这一问题,它为每种书写系统中的每个字符分配一个唯一的数字,称为码位,如今这样的码位已远超十万个。关键在于,Unicode 是一份字符目录,而非一种存储格式,因此它需要一种编码来把这些码位转换成字节。
UTF-8 就是那种编码,也是 ASCII 从未真正消失的原因。UTF-8 每个字符使用一到四个字节,并且经过设计,使得码位 0 到 127——即整个 ASCII 范围——存储在单个字节中,与纯 ASCII 完全相同。这使得 UTF-8 完全向后兼容:任何有效的 ASCII 文件本身就是有效的 UTF-8 文件。127 以上的字符使用额外的字节。这种优雅的兼容性是 UTF-8 如今驱动着绝大多数网络的一大原因。简而言之,ASCII 是最初的 128 字符核心,Unicode 是包含它的通用目录,而 UTF-8 是承载两者的编码,同时让 ASCII 文本逐字节保持不变。
常见问题
ASCII 表中有多少个字符?
标准 ASCII 定义了 128 个字符,编号从 0 到 127。其中,包括空格在内有 95 个是可打印字符,33 个是用于向设备发信号而不打印字形的控制字符。
控制字符和可打印字符有什么区别?
控制字符,即码 0 到 31 加上 127,指示设备去做某件事,例如换行或制表,并且不产生可见字形。可打印字符,即码 32 到 126,是你在屏幕上实际看到的字母、数字、标点和空格。
为什么 ASCII 是 7 位编码?
七位恰好给出 128 种组合,这足以涵盖英文字母、数字、标点和控制信号,同时在缓慢的早期硬件上节省带宽。一个字节中的第八位常常被保留用于奇偶校验差错检测。
字母 A 的 ASCII 码是多少?
大写 A 是十进制 65、十六进制 0x41、二进制 1000001。小写 a 是十进制 97,恰好高出 32,这是一种内置的模式,让大小写转换可以用简单的算术完成。
ASCII 与 Unicode 相同吗?
不相同。ASCII 涵盖 128 个字符,而 Unicode 编目了跨越每种书写系统的超过十万个字符。ASCII 实际上就是 Unicode 的前 128 个码位,所以它是这个更大标准的一个小子集。
UTF-8 与 ASCII 有什么关系?
UTF-8 是 Unicode 的一种编码,它将码位 0 到 127 存储在单个字节中,与 ASCII 完全相同。这使得每个 ASCII 文件都是有效的 UTF-8 文件,也正是 UTF-8 向后兼容并主导现代网络的原因。
