异体字

含义和读音相同但字形不同的汉字变体。如「国」与「國」、「学」与「學」,涵盖正体字、俗体字、繁体字、简体字等关系。

异体字 (variant glyph / variant character) 是指同一个字拥有不同字形变体的现象。汉字中异体字尤其丰富,例如日文中「渡辺」的「辺」就有「邊」「邉」等 20 多种异体字。在中文语境中,最常见的异体字关系是简体字与繁体字的对应,如「国」与「國」、「学」与「學」、「龙」与「龍」。由于人名和地名中大量使用异体字,这是中日韩文本处理中无法回避的问题。

异体字产生的背景有多重因素。第一,汉字在漫长的历史中书体不断演变,同一个字形成了多种写法。第二,中国在 1956 年推行简化字方案,产生了简体字与繁体字的对应关系 (如「龍」简化为「龙」、「書」简化为「书」)。日本也在 1946 年和 1981 年分别通过当用汉字表和常用汉字表简化了字体 (如「國」→「国」、「學」→「学」)。第三,中国大陆、台湾、日本、韩国各自独立简化汉字,导致同一个字在不同地区有不同的标准字形。

Unicode 对异体字的处理有两种方式。一种是为异体字分配不同的码点,例如「国」(U+56FD) 和「國」(U+570B) 拥有各自独立的码点。另一种是使用异体字选择符 (Variation Selector),在基础字符后附加 VS1-VS256 (U+FE00-U+FE0F) 或 IVS (Ideographic Variation Sequence, U+E0100-U+E01EF) 来指定字形。Adobe-Japan1 字符集通过 IVS 可以区分超过 23,000 种字形变体。

在字符计数中,异体字选择符是一个重要的陷阱。「葛」+ IVS (U+E0100) 看起来是 1 个字符,但在 Unicode 层面由 2 个码点组成。用 String.length 计数会得到 2 (如果涉及代理对则更多),与视觉上的字符数不一致。使用书写素簇为单位计数才能正确得到 1。

实务中,异体字最常引发问题的场景是姓名匹配。「渡邊」和「渡辺」很可能指同一个人,但作为字符串却完全不同。在简繁转换场景中,「发」对应繁体的「發」(发生) 和「髮」(头发) 两个字,需要根据语境判断。金融机构和行政系统需要先将异体字正规化 (统一) 再进行匹配。Unicode 的正规化形式 (NFC/NFKC) 能统合部分兼容汉字,但「辺」与「邊」这类异体字不会被统合,需要自行维护异体字对照表。

从字体角度看,异体字的显示需要字体包含对应的字形。如果 IVS 指定的字形不在字体中,则会显示基础字符的默认字形。日本行政机关使用的「文字情报基盘」(MJ 文字信息一览表) 收录了约 6 万个汉字字形,覆盖了户籍和居民登记中使用的异体字。中国的 GB18030 标准也收录了大量异体字和繁体字形。

分享这篇文章