Unicode 给每个字分配一个数字。国 和 國 是不同的码位。字体是那些码位的画法。若文件有正确的字而字体没有字形,你看见方框。若文件有错误的字节,你看见乱码。
这就是转换和字体相关却不是同一项工作的原因。OpenCC 可以把 国 变成 國。它不能在别人的电脑上安装 微软雅黑、Songti TC 或 Noto Serif CJK。人们寄出转换后的文件,同事看见豆腐方块,两边都怪转换器。方块通常是字体覆盖问题。
码位不是图画
Word 文件把字存成数字。字体文件把按那些数字索引的画法存起来。当画法缺失时,操作系统可能:
- 显示方框
- 为那一个字回退到另一种字体
- 为一个有地区变体的码位显示另一地区的字形
回退可以让一句话看起来像勒索信:一个字是宋体,下一个是无衬线系统字体。那难看,仍可读。硬方框更糟,因为你无法判断转换是否发生过。
有些码位有地区特有的字形变体。数字相同;台湾、香港或大陆来源的首选画法不同。为某一地区设计的字体可能把 骨 或 起 画得略有不同。读者会注意到。这不是 OpenCC 改错了字。这是字体的区域表。真正是不同码位的字形差别,见台湾与香港繁体中文。
一套书写系统,许多字体
- 面向简体的字体可能缺少不常见的繁体形体。
- 面向繁体的字体可能缺少一些简体形体。
- 大型 CJK 字体,或一对简体/繁体字体,是通常的修复。
操作系统已经附带回退字体,例如微软雅黑、苹方、思源 / Noto CJK,以及宋体。本站在 CSS 里使用那些系统字体,而不是打包字体文件。你的文档应当做类似的事:挑选真正包含目标标准的字体族。
当你在 PowerPoint 或 PDF 里嵌入字体时,你可能只嵌入用过的字形。转换之后,需要新字形。在简体里“自包含”的文件,在繁体里可能不再自包含。重新嵌入完整的 CJK 字体,或告诉接收方安装哪种字体。
转换之后的文档
当你转换 Word、Excel 或 PowerPoint 文件时,文件里的字变了。接收方仍需要能画出它们的字体。若同事打开你的文件看见方框,先把本页和乱码中文清单发给他们,再转换一次。
一台实用的审阅机器有:
- 一种能覆盖简体的字体
- 一种能覆盖繁体的字体
- 你将用来演示的同一 Office 版本
若你只在创建简体原文的那台笔记本上审阅,你可能看不见客户会看见的繁体回退失败。
Unicode 是转换器能存在的原因
因为 门 和 門 是不同的数字,词典可以用一个替换另一个,而不关心毛笔会怎么写它们。简体与繁体中文是社会标准。Unicode 是技术标准。OpenCC 坐在它们之间。
较旧的编码——Big5、GB2312、GBK——把中文存在更小的映射里。1990 年代的文件仍出现在附件里。若那些字节被当成 UTF-8 来读,你得到的是垃圾,不是方框。垃圾是编码。方框是字体。不要在垃圾上跑 OpenCC。
常见问题
有没有一种字体覆盖全部中文? Noto CJK / 思源这类大型 CJK 家族覆盖很多。“全部 Unicode”仍然很多。对办公工作,一种当前的简体字体加一种当前的繁体字体就够。
我该转成图像,好让字体不再重要吗? 那毁掉了编辑、搜索和以后的转换。修好字体。
为什么浏览器看起来没问题,Word 看起来不对? 浏览器和 Word 不共享同一份回退清单。在接收方将使用的应用程序里测试。
本站会在下载里嵌入中文字体吗? 转换后的办公文件保留它们已有的字体信息,加上新的字。它们不会在你的电脑上安装字体。
国 和 國 在 Unicode 里是同一个字吗? 不是。它们是码位不同的简繁成对。这才让转换成为真正的操作。