✍️

IVS: How Unicode Represents 47 Versions of the Same KanjiIVS 完全解説: 同じ漢字の47通りの字形を表示する

Understanding Ideographic Variation Sequences and Standardized Variation Sequences, with live font rendering of all registered variants.異体字セレクタ(IVS/SVS)の仕組み。登録された全バリアントをフォントで実際に表示。

The Problem: One Code Point, Many Shapes

Han Unification merged characters that share the same origin into single code points. But what happens when you need to specify an exact glyph variant? Japanese names, historical documents, and calligraphic traditions demand precise glyph control beyond what a font's default rendering provides.

For example, the character 辻 (U+8FBB, “tsuji”, a common Japanese surname) has two accepted forms: one with one dot on the left radical (一点しんにょう) and one with two dots (二点しんにょう). Both are “correct” — but which one appears depends on the font, and there is no way to choose using the base code point alone.

Unicode's solution is Variation Sequences: a base character followed by a special variation selector character that specifies the exact glyph form.

How IVS Works: The E0100 Range

Ideographic Variation Sequences (IVS) use variation selectors from the range U+E0100 through U+E01EF (240 selectors, called VS17 through VS256). An IVS is a two-character sequence:

Base character + Variation Selector = IVS

Example:
葛 (U+845B) + VS17 (U+E0100) = 葛󠄀 (specific variant)
葛 (U+845B) alone            = 葛  (default glyph)

The variation selector is invisible — it produces no glyph of its own. But a font that supports IVS will render a different glyph when it encounters the sequence.

ComponentCode pointVisible?
Base character: 葛U+845BYes
Variation selector: VS17U+E0100No (invisible)
Sequence: 葛󠄀U+845B U+E0100Yes (variant glyph)

In JavaScript, each variation selector in this range requires a surrogate pair (2 UTF-16 code units), so an IVS takes 3–4 code units total despite being one grapheme cluster.

SVS: The Emoji and Symbol Variation Selectors

Standardized Variation Sequences (SVS) use a different, smaller set of variation selectors: U+FE00 through U+FE0F (VS1 through VS16). These are used for:

SelectorCommon useExample
VS1 (U+FE00)CJK compatibility variants芦 + VS1 for specific form
VS15 (U+FE0E)Text presentation☺︎ (text style)
VS16 (U+FE0F)Emoji presentation☺️ (emoji style)

The most widely known SVS usage is the text/emoji toggle. Many characters have both a text presentation (monochrome, simple) and an emoji presentation (colorful). VS15 forces text style, VS16 forces emoji style:

// Same base character, different presentations:
"\u2764"           // ❤ (default, usually emoji)
"\u2764\uFE0E"    // ❤︎ (text presentation, VS15)
"\u2764\uFE0F"    // ❤️ (emoji presentation, VS16)

// The selectors are invisible but change rendering:
"❤️".length  // 2 (base + VS16, both in BMP)

Unlike IVS selectors (which are in the SMP and need surrogates), SVS selectors are in the BMP (U+FE00–FE0F) and each take just one UTF-16 code unit.

IVD Collections: Adobe-Japan1 and Moji_Joho

Which variation selectors map to which glyphs is not arbitrary — it is recorded in the Ideographic Variation Database (IVD), maintained by the Unicode Consortium. The IVD contains named collections:

CollectionScopeEntries
Adobe-Japan1Japanese typography (AJ1 CID)~14,700
Moji_JohoJapanese government character info~11,000
Hanyo-DenshiJapanese administrative systems~11,000
KRNameKorean personal name variants~2,200

Adobe-Japan1 is the most widely supported collection. It maps IVS sequences to specific CID (Character ID) numbers in the Adobe-Japan1-7 character collection, which professional Japanese fonts implement. A font that supports Adobe-Japan1 IVS can render thousands of glyph variants.

Moji_Joho (文字情報) is maintained by Japan's Information-technology Promotion Agency (IPA) and focuses on character variants used in official government documents and the family register system (戸籍).

Font Support: When IVS Actually Works

IVS only works if the font supports it. A font must contain:

  • The glyph variants for each supported IVS sequence
  • A cmap table (specifically format 14, Unicode Variation Sequences) that maps base+selector pairs to glyphs

Major fonts with IVS support include:

FontCollectionPlatform
IPAmj MinchoMoji_JohoCross-platform (free)
Noto Sans CJKAdobe-Japan1 (partial)Cross-platform (free)
Kozuka MinchoAdobe-Japan1Adobe products
Yu MinchoAdobe-Japan1 (partial)Windows / macOS
Hiragino MinchoAdobe-Japan1 (partial)macOS

If a font does not support a particular IVS, it simply renders the base character's default glyph and ignores the variation selector. This is a graceful fallback — the text remains legible, just not in the specific variant requested.

The Record Holder: 邉 and Its 47 Variants

The character 邉 (U+9089) holds the record for the most registered IVS sequences. It has approximately 47 variant forms in the Moji_Joho collection, reflecting the many ways this character has been written in Japanese family registers over the centuries.

The surname 渡邉 (Watanabe) is notorious in Japan for having dozens of variant spellings. Municipal offices maintaining family registers need to faithfully reproduce the exact variant used in each family's records, which is why the Moji_Joho collection registers so many forms.

CharacterIVS variants (Moji_Joho)Typical use
邉 U+9089~47渡邉 surname variants
邊 U+908A~30渡邊 surname variants
辺 U+8FBA~10渡辺 surname variants
葛 U+845B~8Place names (葛飾 etc.)

This is a case where IVS is essential: without it, government systems could not accurately record the legally distinct name variants that Japanese law requires preserving.

// The 邉 character with different IVS:
"邉"                    // Default glyph
"邉\u{E0100}"          // Variant 1 (VS17)
"邉\u{E0101}"          // Variant 2 (VS18)
// ... up to ~47 registered variants

// Each is one grapheme cluster:
const seg = new Intl.Segmenter();
[...seg.segment("邉\u{E0100}")].length  // 1

問題: 1つのコードポイント、多数の字形

漢字統合(Han Unification)は同じ起源を共有する文字を単一のコードポイントに統合しました。しかし、正確なグリフ変種を指定する必要がある場合はどうすればよいでしょうか? 日本人の名前、歴史文書、書道の伝統は、フォントのデフォルトレンダリングを超えた精密なグリフ制御を要求します。

例えば、辻(U+8FBB、一般的な日本の姓)には2つの認められた字形があります: 左の部首に点が1つのもの(一点しんにょう)と2つのもの(二点しんにょう)。どちらも「正しい」のですが、どちらが表示されるかはフォントに依存し、基本コードポイントだけでは選択できません。

Unicode の解決策が異体字シーケンス(Variation Sequences)です: 基底文字の後に特別な異体字セレクタ文字を続けることで、正確なグリフ形式を指定します。

IVS の仕組み: E0100 範囲

漢字異体字シーケンス(IVS: Ideographic Variation Sequences)は U+E0100 から U+E01EF の範囲の異体字セレクタ(VS17〜VS256、240個)を使用します。IVS は2文字のシーケンスです:

基底文字 + 異体字セレクタ = IVS

例:
葛 (U+845B) + VS17 (U+E0100) = 葛󠄀 (特定の異体字)
葛 (U+845B) 単体            = 葛  (デフォルトグリフ)

異体字セレクタは不可視です — それ自体はグリフを生成しません。しかし IVS 対応フォントはこのシーケンスを検出すると異なるグリフをレンダリングします。

構成要素コードポイント可視?
基底文字: 葛U+845Bはい
異体字セレクタ: VS17U+E0100いいえ(不可視)
シーケンス: 葛󠄀U+845B U+E0100はい(異体字グリフ)

JavaScript では、この範囲の各異体字セレクタはサロゲートペア(2 UTF-16 コードユニット)を必要とするため、IVS は1書記素クラスタにもかかわらず合計3〜4コードユニットを占めます。

SVS: 絵文字と記号の異体字セレクタ

標準化異体字シーケンス(SVS: Standardized Variation Sequences)は、より小さな異体字セレクタセット U+FE00〜U+FE0F(VS1〜VS16)を使用します。用途は以下の通りです:

セレクタ主な用途
VS1 (U+FE00)CJK 互換変種芦 + VS1 で特定字形
VS15 (U+FE0E)テキスト表示☺︎(テキストスタイル)
VS16 (U+FE0F)絵文字表示☺️(絵文字スタイル)

最も広く知られた SVS の用法はテキスト/絵文字の切り替えです。多くの文字にはテキスト表示(モノクロ、シンプル)と絵文字表示(カラフル)の両方があります。VS15 でテキストスタイル、VS16 で絵文字スタイルを強制します:

// 同じ基底文字、異なる表示:
"\u2764"           // ❤(デフォルト、通常は絵文字)
"\u2764\uFE0E"    // ❤︎(テキスト表示、VS15)
"\u2764\uFE0F"    // ❤️(絵文字表示、VS16)

// セレクタは不可視だがレンダリングを変更:
"❤️".length  // 2(基底 + VS16、両方 BMP 内)

IVS セレクタ(SMP にあり要サロゲート)と異なり、SVS セレクタは BMP(U+FE00〜FE0F)にあり、各1 UTF-16 コードユニットです。

IVD コレクション: Adobe-Japan1 と Moji_Joho

どの異体字セレクタがどのグリフにマッピングされるかは任意ではなく、Unicode コンソーシアムが管理する漢字異体字データベース(IVD: Ideographic Variation Database)に記録されています。IVD には名前付きのコレクションが含まれます:

コレクション範囲エントリ数
Adobe-Japan1日本語タイポグラフィ(AJ1 CID)約14,700
Moji_Joho日本政府の文字情報約11,000
Hanyo-Denshi日本の行政システム約11,000
KRName韓国の人名異体字約2,200

Adobe-Japan1 は最も広くサポートされているコレクションです。IVS シーケンスを Adobe-Japan1-7 文字コレクションの特定の CID(Character ID)番号にマッピングし、プロフェッショナルな日本語フォントがこれを実装しています。Adobe-Japan1 IVS 対応フォントは数千のグリフ変種をレンダリングできます。

Moji_Joho(文字情報)は IPA(情報処理推進機構)が管理し、公式な政府文書や戸籍システムで使用される文字変種に焦点を当てています。

フォントサポート: IVS が実際に機能する条件

IVS はフォントがサポートしている場合のみ機能します。フォントには以下が必要です:

  • サポートする各 IVS シーケンスのグリフ変種
  • 基底文字+セレクタのペアをグリフにマッピングする cmap テーブル(具体的にはフォーマット14、Unicode Variation Sequences)

IVS をサポートする主なフォント:

フォントコレクションプラットフォーム
IPAmj明朝Moji_Johoクロスプラットフォーム(無料)
Noto Sans CJKAdobe-Japan1(部分的)クロスプラットフォーム(無料)
小塚明朝Adobe-Japan1Adobe 製品
游明朝Adobe-Japan1(部分的)Windows / macOS
ヒラギノ明朝Adobe-Japan1(部分的)macOS

フォントが特定の IVS をサポートしていない場合、単に基底文字のデフォルトグリフを描画し、異体字セレクタを無視します。これは優雅なフォールバックです — テキストは読める状態のまま、ただし要求された特定の変種ではありません。

レコードホルダー: 邉とその47の異体字

邉(U+9089)は登録 IVS シーケンス数の最多記録を保持しています。Moji_Joho コレクションに約47の変種形式があり、この文字が数世紀にわたって日本の戸籍でどれほど多様に書かれてきたかを反映しています。

姓の「渡邉」(わたなべ)は日本で数十の異体字綴りがあることで悪名高い存在です。戸籍を管理する市区町村役場は各家庭の記録に使用された正確な変種を忠実に再現する必要があり、これが Moji_Joho コレクションがこれほど多くの字形を登録している理由です。

文字IVS 変種(Moji_Joho)代表的用途
邉 U+9089約47渡邉 姓の変種
邊 U+908A約30渡邊 姓の変種
辺 U+8FBA約10渡辺 姓の変種
葛 U+845B約8地名(葛飾 等)

これは IVS が不可欠なケースです: IVS なしでは、日本の法律が保存を要求する法的に異なる名前の変種を政府システムが正確に記録することができません。

// 邉の異なる IVS:
"邉"                    // デフォルトグリフ
"邉\u{E0100}"          // 異体字1(VS17)
"邉\u{E0101}"          // 異体字2(VS18)
// ... 約47の登録変種まで

// 各々は1書記素クラスタ:
const seg = new Intl.Segmenter();
[...seg.segment("邉\u{E0100}")].length  // 1