1 汉字进计算机的第一道难题
二十世纪中叶,计算机诞生于英语世界。它的字符集只需要容纳 26 个字母、10 个数字和少量符号,一个字节(8 位,256 种组合)便绰绰有余。而汉字常用字就有三千多个,加上生僻字、异体字,总数超过六万。汉字要进入计算机,首先要回答一个根本问题:每一个汉字,用什么数字来代表它?这就是'汉字编码'问题。
在计算机普及之前,中文排版依靠的是铅字。一副字架上有几万个铅字铜模,排版工人要从字架上一颗颗拣字、拼版,再上机印刷。'铅与火'的时代里,汉字的信息量是物理的、可触摸的,也是沉重而缓慢的。上世纪七十年代,中国开始研发汉字信息处理系统,其中最具标志性的成果是 1974 年启动的'748 工程'——汉字信息处理系统工程,它包括汉字精密照排、汉字情报检索和汉字通信三大子项目。北京大学王选主持的汉字精密照排系统,用'轮廓加参数'的数学方法描述字形,跳过二代机、三代机,直接研制第四代激光照排机,让汉字排版告别了铅字。
2 GB2312、GBK 与 GB18030
1980 年,国家标准总局发布《信息交换用汉字编码字符集·基本集》,即 GB2312。它收录汉字 6763 个(一级常用字 3755 个、二级次常用字 3008 个),另有 682 个非汉字图形字符,用两个字节表示一个汉字。GB2312 是汉字信息化的第一块基石:它第一次让'常用汉字'有了统一的数字身份,也为后来的中文操作系统、中文打印机、汉字字库提供了共同的基础。
但 6763 个字显然不够用。人名、地名、方言字、古籍用字常常落在 GB2312 之外,于是有了 1995 年的 GBK(汉字内码扩展规范),收录汉字 21003 个,并向下兼容 GB2312。2000 年,GB18030 发布,采用单字节、双字节、四字节混合编码,收录汉字 27533 个;2005 年的修订版更将汉字扩充至 7 万余个,覆盖了少数民族文字与大量生僻字,成为我国目前法定的、覆盖最全的中文编码标准。
编码标准的每一次扩容,背后都是现实的需求:一个户籍系统、一座图书馆的目录、一部古籍的数据库,只要遇到一个无法编码的字,整个信息链就会断裂。'缺字'曾经是中文信息化中最令人头疼的问题之一,而编码标准的一次次扩展,正是为了把汉语世界里每一个真实的字都接住。
3 Unicode 与中日韩统一表意文字
GB2312 解决的是中国的汉字编码问题,但世界上使用汉字的不止中国。日本、韩国、朝鲜、越南以及海外华人社区,各有自己的编码体系,一份中日韩的文档在不同系统中常常变成乱码。上世纪八十年代末,国际标准化组织与多家计算机公司开始推动一个覆盖全世界所有文字的字符集——Unicode(统一码),目标是用一个唯一的数字编号,代表世界上每一个字符。
Unicode 为汉字划定了专门区块,称为 CJK Unified Ideographs(中日韩统一表意文字),简称'Unihan'。所谓'统一',是指把中、日、韩等国字形相近、来源相同的汉字合并到同一个码位,用'字形差异'机制来区分各国习惯写法。这一做法在技术上是高效的选择,但也带来'一个码位对应多国字形'的争议——同一个编码,在中国应当显示宋体楷书的写法,在日本则显示日本新字体的写法,这需要靠'地区字体'来解决。
从 Unicode 1.0 到如今的 Unicode 15,CJK 区块不断扩充,汉字及各类表意文字的总数已超过 9 万个,包含大量甲骨文、金文、篆书的古文字编码。今天,当我们在网页上、手机上看到任何一个汉字,无论它多么生僻,背后都是这套国际统一编码在支撑。
4 从点阵到矢量:字库与字体设计
编码解决的是'一个字是什么',字库解决的则是'一个字长什么样'。早期的汉字显示依靠点阵字库:把每个字用一张小方格图(如 16×16、24×24 的矩阵)记录下来,屏幕上按格子填充。点阵字库简单可靠,但放大后会变成锯齿,小字号又会糊成一团,字号一多,存储量便成倍增长。
激光照排与矢量字库改变了这一切。王选提出的'轮廓加参数'方法,用直线和曲线的轮廓描述字形,再配合笔画宽度、衬线形状等参数,使同一个字可以任意缩放而不失真,存储量也大幅减少。此后 TrueType、OpenType 等字体格式相继出现,一个字库文件可以容纳数万个字形,还支持连笔、变体、多种语言。
汉字字库的设计是一项浩大的工程:一套完整的字体,常用字加扩展字往往要设计两三万个字形,每个字形都需反复调整笔画、重心、中宫与留白,让所有字在一起看起来均匀协调。正因如此,一套高质量中文字体往往需要数年乃至十余年的打磨。从宋体、黑体、楷体、仿宋这'四大字体',到思源黑体、思源宋体等开源字体,字库让汉字在数字世界里保持了书写的美感。
荐相关推荐
喜欢「汉字数字化:从铅字到字库」的人,大多也喜欢 汉书·司马迁传赞(节选)。