即使不是开发者,您也许听说过“ASCII”这个词。在网上浏览时,您可能经历过文字破损,看起来像外星语言的现象,或者通过“ASCII 代码不兼容”的技术错误信息了解它。

究竟这个 ASCII 代码是什么,为什么它被视为数字世界的“通用语言”呢?今天,我们将了解计算机理解人类语言的最基本约定——ASCII 代码。


1. 计算机只懂数字



我们在屏幕上看到的“A”、“B”、“C”等字符,对于计算机来说,其实并不是图像或文字。计算机只能理解0和1(二进制),因此它只是一台计算机。

那么,我们输入的键盘字符是如何保存到计算机中的呢?在人类和计算机之间,需要一个“约定”

“我们约定数字 65 代表字母 ‘A’。”

“数字 97 代表小写字母 ‘a’。”

这个约定系统化整理成的表就是ASCII (美国信息交换标准代码)。顾名思义,它是美国信息交换标准代码

2. ASCII 代码的结构:7位的魔法

ASCII 代码在1960年代设立。当时计算机资源非常有限,因此必须尽可能有效地表示字符。所以选择了7位(bit)

  • 总共 128 个字符:7 位可以表示的可能性是 $2^7$,即从 0 到 127,共 128 个。

  • 组成部分:

    • 控制字符 (0~31):虽然在屏幕上不输出,但负责通信控制、换行(Line Feed)、制表(Tab)等。

    • 可显示字符 (32~127):包括特殊符号、数字(0-9)、拉丁字母大写(A-Z)、小写(a-z)。

3. 为什么还使用ASCII?



尽管现代技术飞速发展,ASCII 代码依然是数字世界的根源。这是为什么呢?

1) 兼容性之王

即使是目前最现代、最广泛使用的字符编码方式UTF-8,也与 ASCII 代码完美兼容。在 UTF-8 文档中,英文 ‘A’ 与 ASCII 代码有着相同的数据。因此,即使是很老旧的遗留系统与最新系统在传递英文数据时也不会出现任何问题。

2) 编程基础

在编程中处理字符时,ASCII 值的规则非常有用。

  • ‘A’ 是 65,而 ‘a’ 是 97。

  • 两个值的差是 32。

    开发者利用这些数字规则进行大小写转换,或有效地排序数据。

3) 最轻的数据

所有字符都在 1 字节(Byte)内处理,因此仅用英文(拉丁字母)撰写的文档体积小,处理速度快。这就是为什么全球大部分互联网通信协议(如 HTTP 等)基于 ASCII。

4. ASCII 的遗产:ASCII 艺术

ASCII 代码不仅是一种简单的通信协议,还创造了一种文化。在不支持图形的终端环境中,人们用键盘上的字符绘制图画。在1990年代后期至2000年代初的日本电视剧“电车男”中,出现过一个用 ASCII 创作出巨大艺术的角色。

   |\---/|
   | o_o |
    \_^_/

这种仅用 128 个字符的幽默表现文化,至今仍在开发者的源代码注释和电子邮件签名中随处可见。

电视剧电车男的 ASCII 艺术示例

5. ASCII 的决定性局限:世界并非只用英语

然而,ASCII 存在致命缺陷。首先是其名称“美国标准(American Standard)”

这个 7 位的小容器完全没有空间来容纳汉字、韩文、日文(CJK)以及阿拉伯语、印地语、斯拉夫字母等不使用拉丁字母的许多文化的字符。

因此,在过去,各国语言各自创造了独立的编码方式(如 EUC-KR、Shift_JIS、Big5 等)。如果两个使用不同编码的国家间传递数据,字符就会全部破损,并显示出不可识别的符号,如 □□,即所谓的字符破损(Mojibake)现象十分常见。

最终,全球所有字符需要统一标准,于是Unicode应运而生。有趣的是,这个庞大的 Unicode 的第一个位置(0~127)仍然由 ASCII 代码占据。这是在数字历史的初期给予的敬意。


总结

  1. 定义:计算机为理解字符而进行数字(0~127)与字符 1:1 映射的初始标准约定。

  2. 特点:仅包含拉丁字母、数字和基本特殊字符。

  3. 局限:无法表示 CJK(汉中日)、阿拉伯语等非拉丁字符。

ASCII 代码不仅仅是一串数字。它凝聚了早期计算机工程师们试图将人类语言翻译为机器语言的努力和效率,构成了数字时代最基本的字母表


下篇文章预告

跳出 ASCII 代码的狭小空间,我们将了解包含全球所有语言和表情符号(😊)的巨大约定——Unicode 的原理。如果您想知道“为什么我的字符会破损”的答案,请期待下篇文章!