異体字
同じ意味・読みを持ちながら字形が異なる漢字のバリエーション。「高」と「髙」、「辺」と「邊」と「邉」のように、正字・俗字・旧字体・新字体などの関係を含む。
異体字 (variant glyph / variant character) は、同一の文字でありながら形が異なるバリエーションのことです。日本語の漢字では特に多く、「渡辺」の「辺」だけでも「邊」「邉」「辺」など 20 種類以上の異体字が存在します。人名や地名に異体字が多く使われるため、日本語のテキスト処理では避けて通れない問題です。
異体字が生まれる背景には複数の要因があります。第一に、漢字の長い歴史の中で書体が変遷し、同じ文字に複数の字形が定着したこと。第二に、1946 年の当用漢字表と 1981 年の常用漢字表で字体が簡略化され、旧字体と新字体の対が生まれたこと (例: 「國」→「国」、「學」→「学」)。第三に、中国・台湾・日本・韓国で同じ漢字が独自に簡略化され、地域ごとに異なる字形が標準となったことです。
Unicode では異体字の扱いに 2 つのアプローチがあります。一つは、異体字に別々のコードポイントを割り当てる方法です。「高」(U+9AD8) と「髙」(U+9AD9) は別のコードポイントを持ちます。もう一つは、異体字セレクタ (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 万字の漢字字形を収録しており、戸籍や住民票で使われる異体字をカバーしています。