日语新旧字体演变

最近在折腾 [[Rime]] 输入法,想配置一套日语输入方案,方便写笔记时随时切换输入日语词汇。配置过程中我发现了一个奇怪的现象:候选词列表里有时会出现一些看起来像简体中文的汉字,而不是标准日语汉字的写法。出于好奇,我翻开 japanese.jmdict.dict.yaml 字库文件仔细检查,才意识到背后其实涉及日语汉字的一段重要历史——新旧字体之争。

日语汉字改革的历史背景

要理解这个问题,得先回到二战结束后的日本。1945 年战败后,日本政府推行了一系列文字改革,目的是降低汉字学习难度,推动文化普及。1946 年,日本内阁颁布了《当用漢字表》,列出了日常生活和出版物中应当使用的 1850 个汉字。紧接着在 1949 年,又发布了《当用漢字字体表》,规定了这些汉字的标准写法,对许多笔画繁复的旧字形进行了简化,这些经过简化的字形就是所谓的「新字体」,而原来的写法则被称为「旧字体」。

这次改革的思路与中国大陆后来推行简体字的改革有几分相似,但两者是独立进行的,具体的简化方案也存在相当多的差异。日语的新旧字体改革并非全面替换,而是在保留汉字体系的前提下,对特定字形进行局部调整,整体保守程度比中文简化字改革要高一些。

新旧字体的实际差异

新旧字体的区别,有些非常明显,有些则极为细微。来看一些典型的例子:

旧字体 新字体 中文简体 含义
国家
学习
身体
广 宽广
变化
边界
转动
证明
艺术
宝贝

看这张表你会发现:某些新字体和中文简体字完全相同,比如「国」「学」「体」;但另一些则走了不同的简化路径,比如「広」对应繁体「廣」,中文简体却是「广」,三者各不相同;「証」对应繁体「證」,中文简体是「证」,日语新字体的写法又自成一格。

与中文简繁字的三角关系

日语新旧字体和中文简繁体字之间的关系,大概可以分为以下几种情况:

第一种是完全一致。日语新字体与中文简体字写法相同,与繁体字相对。「国/國」「学/學」「体/體」这些字,在日语和普通话里写法一样,只是发音不同,容易让人误以为日语用的就是简体中文字。

第二种是日语独有简化。日语新字体进行了简化,但和中文简体字的方案不同。日语的「広」(旧字体「廣」),中文简体写作「广」;日语的「証」(旧字体「證」),中文简体写作「证」。这类字是真正意义上的「日语特有字形」,既不是繁体,也不是简体,容易在学习时造成混淆。

第三种是日语未简化。一些字在中文简体里被大幅简化,但日语新字体保留了较为接近原始字形的写法。例如「齢」(年龄)的中文简体是「龄」,日语写法接近繁体。「飲」「飯」这类字在日语里也保留了更多笔画。

正是因为这种复杂的三角关系,日语字库在编码和录入时就容易出现混用,某个字到底是用「日语新字体对应的码点」还是「恰好相同的中文字符码点」,在显示上完全一样,但在字体级别的渲染上可能有微妙差异。

Rime 字库里的新旧字体混用

回到最初触发我好奇心的那个问题。[[Rime]] 的日语输入方案通常基于 [[JMdict]] 词典构建,japanese.jmdict.dict.yaml 这个字库文件是从 JMdict 数据库转换而来的。JMdict 是由社区维护的日英双语词典,历史可以追溯到 1990 年代,数据条目来自不同时期和不同贡献者,字形标准难免不够统一。

在字库里,你可能会看到同一个单词同时存在新字体和旧字体两种写法,甚至混入了与日语新字体字形相同、但实际是中文简体字码点的字符。从渲染结果来看,这两者往往完全一样,但如果涉及到字体替换或者特定渲染环境,就可能出现奇怪的显示问题——候选词里的汉字突然变成了「中文字体风格」,笔画细节与日文字体略有出入。

更麻烦的是,Unicode 对很多日中共用汉字使用相同的码点,即所谓的 CJK 统一汉字。「国」这个字在 Unicode 里只有一个码点 U+56FD,无论是日语语境还是中文语境都是同一个字符。字形上的差异只能通过字体来体现——日文字体和中文字体对同一个汉字的渲染可能略有不同,比如横折的开口方向、笔画的连接方式等。所以在 Rime 候选词里看到「像简体中文的字」,很多时候并不是真的混入了中文字符,而是看到了字形上与简体字相同的日语新字体,只是字体渲染风格不同。

在输入法中处理这个问题

如果你也在用 [[Rime]] 配置日语输入,遇到类似问题,有几个思路可以参考:

检查字库来源是第一步。确认你使用的 japanese.jmdict.dict.yaml 版本和来源,优先使用维护活跃、经过校对的版本。目前比较常用的日语 Rime 方案有 rime-japanese 等,可以对比不同版本字库里的字形差异。

设置合适的显示字体也很重要。在系统或 Rime 的样式配置里,为日语输入候选项指定使用日文字体,比如 Noto Serif JP、Source Han Serif JP、游明朝等。这样即便码点相同,字形也会按照日文规范渲染,视觉上就能明显区分「这是日语汉字还是中文汉字」。

此外,在 Rime 里可以为不同的 schema(方案)设置不同的显示字体,切换到日语模式时自动使用日文字体,切回中文时换回中文字体,操作上比较优雅。

最后

这次因为一个输入法配置的小问题,意外深入了解了日语汉字改革的历史。日语新旧字体的演变和中文简繁字的分化,本质上都是现代社会在汉字这套古老文字系统里求效率、求统一的尝试。两套改革走了不同的路,却有着共同的出发点——让更多人能更轻松地读写汉字。

对学习日语的人来说,理解新旧字体的区别,不仅能帮助正确识读老书、公文和人名(日本人名里旧字体用法相当普遍),也能更好地把握日语和中文在汉字使用上的异同。至于在 [[Rime]] 里折腾日语输入方案,倒意外成了一次文字学入门课,这大概就是技术折腾的附加价值所在。