异体字
含义和读音相同但字形不同的汉字变体。如"国"与"國"、"学"与"學",涵盖正体字、俗体字、繁体字、简体字等关系。
异体字 (variant glyph / variant character) 是指同一个字拥有不同字形变体的现象。汉字中异体字尤其丰富,例如日文中"渡辺"的"辺"就有"邊"、"邉"等 20 多种异体字。在中文语境中,最常见的异体字关系是简体字与繁体字的对应,如"国"与"國"、"学"与"學"、"龙"与"龍"。由于人名和地名中大量使用异体字,这是中日韩文本处理中无法回避的问题。
异体字产生的背景有多重因素。第一,汉字在漫长的历史中书体不断演变,同一个字形成了多种写法。第二,中国在 1956 年推行简化字方案,产生了简体字与繁体字的对应关系 (如"龍"简化为"龙"、"書"简化为"书")。日本也在 1949 年通过《当用汉字字体表》简化了字体 (如"國"→"国"、"學"→"学")。第三,各地区对简化的取舍不同,加上维持繁体字的台湾、香港,同一个字在不同地区形成了不同的标准字形。
Unicode 对异体字的处理有两种方式。一种是为异体字分配不同的码点,例如"国"(U+56FD) 和"國"(U+570B) 拥有各自独立的码点。另一种是使用异体字选择符 (Variation Selector)。异体字选择符分为 VS1-VS16 (U+FE00-U+FE0F) 和 VS17-VS256 (U+E0100-U+E01EF),附加在基础字符之后来指定字形,汉字的字形指定使用后一个范围的 IVS (Ideographic Variation Sequence)。Adobe-Japan1 字符集中作为 IVS 登记的字形序列超过 14,000 种。
在字符计数中,异体字选择符是一个重要的陷阱。"葛"+ IVS (U+E0100) 看起来是 1 个字符,但在 Unicode 层面由 2 个码点组成。用 String.length 按 UTF-16 代码单元计数会得到 3 (基础字"葛"占 1,异体字选择符 U+E0100 是代理对占 2),与视觉上的字符数不一致。使用书写素簇为单位计数才能正确得到 1。
实务中,异体字最常引发问题的场景是姓名匹配。"渡邊"和"渡辺"很可能指同一个人,但作为字符串却完全不同。在简繁转换场景中,"发"对应繁体的"發"(发生) 和"髮"(头发) 两个字,需要根据语境判断。金融机构和行政系统需要先将异体字正规化 (统一) 再进行匹配。Unicode 的正规化形式 (NFC/NFKC) 能统合部分兼容汉字,但"辺"与"邊"这类异体字不会被统合,需要自行维护异体字对照表。
从字体角度看,异体字的显示需要字体包含对应的字形。如果 IVS 指定的字形不在字体中,则会显示基础字符的默认字形。日本行政机关使用的"文字情报基盘"(MJ 文字信息一览表) 收录了约 6 万个汉字字形,覆盖了户籍和居民登记中使用的异体字。中国的 GB18030 标准也收录了大量异体字和繁体字形。