異体字

同じ意味 / 読みを持ちながら字形が異なる漢字のバリエーション。「高」と「髙」、「辺」と「邊」と「邉」のように、正字 / 俗字 / 旧字体 / 新字体などの関係を含む。

異体字 (variant glyph / variant character) は、同一の文字でありながら形が異なるバリエーションのことです。日本語の漢字では特に多く、「渡辺」の「辺」だけでも「邊」「邉」「辺」など 20 種類以上の異体字が存在します。人名や地名に異体字が多く使われるため、日本語のテキスト処理では避けて通れない問題です。

異体字が生まれる背景には複数の要因があります。第一に、漢字の長い歴史の中で書体が変遷し、同じ文字に複数の字形が定着したこと。第二に、1949 年の当用漢字字体表で字体が簡略化され、旧字体と新字体の対が生まれたこと (例: 「國」→「国」、「學」→「学」)。第三に、中国 (簡体字) と日本 (新字体) がそれぞれ独自に字体を簡略化し、繁体字を維持した台湾・香港も含め、地域ごとに標準字形が分かれたことです。

Unicode では異体字の扱いに 2 つのアプローチがあります。一つは、異体字に別々のコードポイントを割り当てる方法です。「高」(U+9AD8) と「髙」(U+9AD9) は別のコードポイントを持ちます。もう一つは、異体字セレクタ (Variation Selector) を使う方法です。異体字セレクタには VS1〜VS16 (U+FE00〜U+FE0F) と VS17〜VS256 (U+E0100〜U+E01EF) があり、基底文字の後に付加して字形を指定します。漢字の字形指定には後者の範囲を用いた IVS (Ideographic Variation Sequence) が使われます。Adobe-Japan1 コレクションでは 14,000 を超える字形シーケンスが IVS として登録されています。

文字数カウントにおいて、異体字セレクタは重要な落とし穴です。「葛」+ IVS (U+E0100) は見た目は 1 文字ですが、Unicode 上は 2 つのコードポイントで構成されます。String.length は UTF-16 コード単位を数えるため、この場合は 3 になります (基底の「葛」が 1、異体字セレクタ U+E0100 はサロゲートペアで 2)。いずれの数え方も見た目の文字数と一致しません。書記素クラスタ単位でカウントすれば 1 文字として正しく数えられます。

実務上、異体字が問題になる典型的な場面は氏名の照合です。「渡邊」と「渡辺」は同一人物を指す可能性が高いですが、文字列としては完全に異なります。金融機関や行政システムでは、異体字を正規化 (統一) してから照合する処理が必要です。Unicode の正規化形式 (NFC/NFKC) では一部の互換漢字が統合されますが、「辺」と「邊」のような異体字は統合されないため、独自の異体字テーブルを用意する必要があります。

フォントの観点では、異体字の表示にはフォントが対応する字形を持っている必要があります。IVS で指定された字形がフォントに含まれていない場合、基底文字のデフォルト字形が表示されます。日本の行政機関が使う「文字情報基盤」(MJ 文字情報一覧表) は約 6 万字の漢字字形を収録しており、戸籍や住民票で使われる異体字をカバーしています。

この記事を共有