你有没有想过 手机屏幕上显示的每一个字 在计算机底层其实都是一串数字 从你打出"你好"这两个字到它出现在屏幕上 中间经历了一场跨越半个世纪的编码演化史
一 ASCII与它的局限
1960年代 美国人发明了ASCII编码 用7个二进制位表示一个字符 总共能表示128个符号 英文字母大小写加数字加标点符号刚刚好 但问题来了 这只够装下英语 ASCII里没有一个汉字的位置 所以1980年代中国引进计算机时遇到了一个核心矛盾 机器能处理英文但处理不了中文
二 汉字编码的百家争鸣时代
1980年代 中国学者开始为汉字设计编码方案 最著名的是GB2312 它用两个字节表示一个汉字 理论上能表示65536个符号 实际收录了6763个常用汉字 这个编码让汉字第一次能被计算机存储和传输 但问题随之而来 一个文件如果同时包含GB2312的中文和ASCII的英文 计算机很难区分哪些字节是中文哪些是英文 这个问题在中文互联网早期造成了大量乱码
三 Unicode:一个统一所有文字的野心
1990年代 一个更大的想法诞生了 为什么不给世界上所有的文字一个统一的编码 不管你是汉字 阿拉伯字母 还是古埃及的象形文字 都给你一个永不重复的数字编号 这就是Unicode
Unicode的本质是一张巨大的表格 每个文字对应一个唯一的码点 比如"中"字的码点是U+4E2D "A"的码点是U+0041 但Unicode只规定了编号 没规定怎么存储 如果你直接用两个字节存所有字符 英文内容会浪费一倍的空间 因为"hello"本来是5个字节 用Unicode直接存就变成10个字节
四 UTF-8:优雅的解决方案
为了解决存储效率的问题 UTF-8被发明出来 它是Unicode的一种存储方式 巧妙之处在于它是变长的 英文和ASCII一样只用1个字节 汉字通常用3个字节 罕见字可能用4个字节
这种设计使得UTF-8能同时兼容旧的ASCII系统 又能表示Unicode表格里所有字符 现在全球互联网超过98%的网页使用UTF-8编码 它成了事实上的标准
五 为什么有些字还是显示成方框
即使有了Unicode和UTF-8 你偶尔还是会看到手机上某个字显示成方框或问号 问题不在编码 在于字体 你的设备可能没有安装包含那个字符的字体文件 就像一个图书馆有了世界上最全的书目编号系统 但书架上没有那本书 你就无法阅读它
六 尾声
从ASCII的128个符号到Unicode目前收录的超过15万个字符 人类用半个世纪建立了一套能让所有文字共存于同一台机器里的编码体系 下次打出"你好"两个字的时候 背后是一个字节一个字节的精密约定 是无数工程师为了让不同语言能在数字世界里平等交流而做的工作 每一个汉字在计算机里的旅程 本身就是一段浓缩的信息技术发展史