異体字セレクタ[注 1] [注 2] (いたいじセレクタ、英: Variation Selectors) は、Unicode および ISO/IEC 10646 (UCS) における、文字の字体をより詳細に指定するためのセレクタ (選択子) である。
Unicodeでは抽象的な文字を定め、個々の文字の字形の詳細には立ち入らない。このため同じ意味で似た形の文字には同じ電子的な表現が与えられ、字形の区別が必要なときはフォントの指定などによって行うのが原則である[1][注 3]。
この原則は、たとえばラテン文字の 'a' で、上部の右から左へ伸びる線があるかどうか、という違いは通常は「フォントの違い」であり「別の字」とはしないためほとんど問題ない。しかし例えば、CJK統合漢字において、Han unification (en:Han unification) や各国内標準の都合を理由として、運用上しばしば「別の字」とされる字形を、様々な経緯の結果「詳細/デザイン差」として同じ符号位置としてしまっているのは、問題がしばしば発生する (初期のUnicodeが提案された当初から危惧されていた通りに)。そのため、状況によっては、フォントの指定などを含めることができないプレーンテキスト上で字形の区別を保存したいという需要も存在する。
このような字形の区別にかかわる需要は、Unicodeの漢字統合の規則が国内での運用の実情に沿っていない日本では特に顕著であり、JISの各文字集合 (JIS X 0208、JIS X 0212、JIS X 0213) やUnicodeで満たせない需要に対応するため、官庁では戸籍統一文字や住民基本台帳ネットワーク統一文字など、民間では今昔文字鏡やGTプロジェクトなどといった独自の大規模文字セットが繰り返し作成され、一部で運用されてきた。しかしそれらは独自であるがゆえに、Unicodeを使用している既存の大多数のPC環境と相互運用性がない。
異体字セレクタは以上のような問題をUnicode上で解決するために考案された特殊な「文字」(符号位置が与えられているもの、という意味では「文字」) である。異体字セレクタが利用できる文字は規格で定められており、先行する1文字 (基底文字) の後に規格で定義された異体字セレクタを付けることで異なる字形が選択できる。なお基底文字と異体字セレクタで構成された文字を異体字シーケンス(Variation sequence)とよぶ。異体字セレクタを用いれば、異体字は文字コードとして表現できるため、プレーンテキスト上でも字形の区別をつけることができる。HTMLやCSSなどのWeb標準を管理しているWorld Wide Web Consortiumは、HTMLなどのマークアップ言語においても字形を指定するために異体字セレクタを使うことを想定している[9]。なお異体字セレクタは、付加された文字の字形をより詳細に指定する機能を持つが、異体字セレクタそのものが表示されることはない。
異体字シーケンスには2種類あり、Standardized Variation Sequence (標準化された異体字シーケンス、略称 SVS[注 4]) と、Ideographic Variation Sequence (漢字異体字シーケンス、略称 IVS) がある。
SVSは非漢字やCJK互換漢字などで利用され、その字形コレクションはUnicodeのStandardized Variants[10]にて定義されている。Standardized Variantsへの字形の追加は、ユニコードコンソーシアムが行なっている。
一方、IVSは漢字専用で、字形コレクションは Ideographic Variation Database (漢字異体字データベース、略称 IVD) にて定義されている。IVDへ字形コレクションを登録するには、定められた手続きに則ってユニコードコンソーシアムへ申請を行う必要がある[11]。
2017年12月現在、異体字セレクタにより利用できる異体字は、以下のとおりである。
Standardized Variantsに登録されている字形コレクションとその数
IVD (2017-12-12版) に登録されている字形コレクションとその数
ただしHanyo-Denshiには、Adobe-Japan1と多数の重複がある (後述の#問題点も参照)[13]。Hanyo-DenshiとMoji_Johoでは同一の字形は異体字セレクタを共有している。Adobe-Japan1では、文字セットのAdobe-Japan1-6に含まれる漢字であれば「一」(U+4E00) のように単一の字形しか存在しないものでもその単一の字形が登録されている。Hanyo-Denshiでは、Adobe-Japan1とは異なり同一符号位置で複数の字形を持つもののみ登録されており、単一の字形しか存在しないものは登録されていない。
異体字セレクタとして以下のものが定義されている。
異体字セレクタとそれが付加される文字との組み合わせ、および指定される字形は規格で定められており、それ以外の組み合わせは無視される。利用者が独自に考えた未登録の字形を利用したい場合には私用領域を用いる。私用の異体字セレクタ (Private Use Variation Selectors) を追加する提案もあった[14]が、取り入れられていない。
IVSでは拡張領域である追加特殊用途面 (SSP) に定義された異体字セレクタ (U+E0100〜U+E01EF, VS17~VS256) を使用する[11]。このためIVSに対応し、UTF-16を使用するアプリケーションは、サロゲートペアを正常に扱えなければならない。逆にSVSではUnicode 10の時点では全て基本多言語面 (BMP) の異体字セレクタ (U+FE00〜U+FE0F, VS1~VS16) を使用している。なおCJK互換漢字は、漢字でありながらIVSではなく非漢字と同じSVSとして登録されたため、基本多言語面 (BMP) の異体字セレクタを使用する。
2012年1月には絵文字としても使われる107文字がStandardized Variantsに追加され、テキストスタイル (普通の文字のように白黒で表示) と絵文字スタイル (カラーで表示したり、アニメーションする) の切替をSVSで行えるようになった。使用する異体字セレクタは基本多言語面に規定されたもので、テキストスタイルがU+FE0E (VS15)、絵文字スタイルがU+FE0F (VS16) となっている。
なお、U+303EにIDEOGRAPHIC VARIATION INDICATOR (直訳すると漢字異体字表示子) という似たような名称で、かつ例示字形が点線で囲まれている (通常は不可視である制御文字などを示す) ものが存在するが、これはこれに続く漢字が異体字であることを示す可視の記号 (下駄記号の異体字版) であり、異体字セレクタではない[15]。
JIS X 0213やCNS 11643などの各国の文字コードでは区別されているが、Unicodeでは統合されている文字を区別するため、UnicodeではこれまでCJK互換漢字を使ってきた。しかし技術的な制約により、漢字の異体字セレクタはCJK統合漢字 (正確にはUnified_Ideographプロパティを持つ文字) にしか付けることができない。これはUnicode正規化に対する安定性の問題 (CJK互換漢字#日本語処理における問題点を参照) を改善するが[16]、同じ字形を意図していても異体字セレクタに対応した実装と対応していない実装との間で異なる符号化表現が採用され、混乱を招く可能性も指摘されている[17]。
また、2006年1月にIVDへの字形コレクションの登録手続きが制定され[11]、登録が可能になった後にもARIB外字や汎用電子情報交換環境整備プログラムで収集された漢字の一部をCJK互換漢字として収録することが要望される[18][19]など、足並みは必ずしもそろっていなかった。
2013年9月30日制定のUnicode 6.3では、CJK互換漢字がUnicode正規化でCJK統合漢字に置き換えられ、字形等の情報を失ってしまう問題を解消するために、CJK互換漢字と等価なCJK統合漢字と異体字セレクタの組合せがIVDとは別にStandardized Variantsに登録され、SVSにより利用できるようになった。IVSとは異なり基本多言語面にあるU+FE00 (VS1) ~U+FE02 (VS3) を使う。IVDにある字形と同じものでも登録されている。CJK互換漢字ブロックおよびその補助集合のうち、CJK統合漢字として扱うものを除いた1,002字全てが登録された。例えば、「侮」の康煕別掲の字体でありCJK互換漢字であるU+FA30の「侮」は、U+4FAEとU+FE00 (VS1) の組合せで登録された。また、字体の違いでなく韓国KS X 1001の読みの違いで分離されているものや台湾Big5の誤って重複収録されたものに対応するCJK互換漢字にも異体字セレクタが与えられている。例えば、U+F90Aの「금」(Geum、クム) と読む「金」には、U+91D1 (KS X 1001では「김」(Gim、キム) と読む「金」に対応) と字体が全く同じであるが、これにU+FE00 (VS1) を付け加える組合せが与えられた。
異体字セレクタに対応したフォントを指定できる環境以外では、異体字セレクタを使用しても対象の環境で意図した異体字が表示されるとは限らない。ただし外字と異なり、異体字セレクタは文字コード上で指定され、かつセレクタ値の定義は共通のため、どのような字形を意図していたかの情報は失われない。
Unicodeは主に米国企業の集まりからなるユニコードコンソーシアムが定める私的な文字コード規格だが、国際符号化文字集合 (ISO/IEC 10646, UCS) との間で、収録文字と符号の割り当てに関して常に同期を取ることで合意がなされている[20]。国際符号化文字集合は国際標準化機構 (ISO) と国際電気標準会議 (IEC) の合同技術委員会 (ISO/IEC JTC 1) 第2小委員会 (SC2) 第2作業部会 (WG2) で制定作業が行われている。以下、WG2での動きを中心に異体字セレクタの収録にかかわる歴史を概観する。
2000年9月15日、ISO/IEC 10646-1が改訂され、中国の提案によりUCSに収録されたモンゴル文字の一部としてモンゴル自由字形選択子 (Mongolian Free Variation Selectors) 3文字が規定された[21]。
2000年3月14日、アメリカがUCSへの数学記号の追加を提案した。この一部として、異体字セレクタ1文字が含まれていた。これは、意味が同じだが出版社の慣習や著者の好みなどにより異なる字形が使われることのある数学記号の字形を区別するために使うことを意図していた[22]。
2001年1月14日、アメリカが追加の異体字セレクタの収録および異体字セレクタの使い方に関する説明の追加を提案した。この説明は漢字に対しての使用が想定されていたが、実際に漢字に対して定められた組み合わせはこの時点で1つも存在しなかったため、漢字に関する言及は除いてWG2に受理された[23]。
2001年8月17日、WG2のリエゾン会員であるユニコードコンソーシアムが、活動報告として255文字の異体字セレクタを追加で承認したことを述べた[24]。UCSとUnicodeの同期の原則により、これらはUCSにも収録される必要があった。
2002年3月27日にUnicode 3.2が[25]、7月15日にISO/IEC 10646-1:2000 追補1が制定された[26]。これらは256文字の異体字セレクタのうち基本多言語面に含まれる16文字を収録していた。
2002年4月1日、日本はWG2に、万寿の表現には少なくとも10000種類の異体字セレクタが必要であるから、UCSの第13面をまるまる漢字の異体字セレクタに割り当てるべきであるとする文書を提出した[27]。ただしこれは大真面目に書かれてはいるもののジョークRFCに似たエイプリルフール文書で、なぜかWG2の第42回会議の議題にまで上ってしまったが[28]、実際には審議されていない[29]。
2002年5月20日、日本は上記アメリカの提案が異体字セレクタを漢字に使うつもりであったことに関して、議論が全く深められておらず導入は時期尚早であると懸念を表明した[30] (モンゴル文字や数学記号の収録に伴う異体字セレクタの導入ではそれまで長い時間を掛けて検討が重ねられていた)。
2003年4月にUnicode 4.0が[31]、12月にISO/IEC 10646:2003が制定され[32]、追加面に含まれる異体字セレクタの残り240文字が両規格に収録された。
2003年6月25日、ドイツがウムラウトとトレマを区別するための異体字セレクタの追加を要望したが[33]、技術的制約により異体字セレクタでは実現不可能であったため却下された[34]。
2005年7月16日、アメリカの企業アドビのエリック・ミューラーとアメリカの企業サン・マイクロシステムズの樋浦秀樹 (当時) より、異体字セレクタを実際に漢字で運用するための漢字字形データベース (英: Ideographic Variation Database、IVD) の規格草案がユニコードコンソーシアムに提案され[35]、2006年1月13日正式版が発行された[36]。
2006年7月4日にISO/IEC 10646:2003 追補2が、14日にUnicode 5.0が制定され[37]、両規格へのパスパ文字の収録に合わせてパスパ文字と異体字セレクタの組み合わせが追加された[38]。
2007年12月14日、Adobe-Japan1が最初の漢字字形コレクションとして正式に承認され、IVDに登録された[39]。ただし2度の公開レビューにもかかわらず割り当てに疑問が残る組み合わせの存在も指摘されている (右図はその一例)[40]。
2008年10月10日、日本は汎用電子情報交換環境整備プログラムの成果として収集・整理された、戸籍や住民基本台帳ネットワークの処理に必要とされる異体字を、互換漢字として追加提案した[19]。これに対しUnicode Technical Committee (UTC)と米国は、互換漢字は正規化に際して区別が保存されず、また統合漢字の字形の一意性は保証されないため、IVDによる登録を推奨するとコメントした[41]。またUTCは、SC2からの登録に対して通常IVDへの登録にかかる登録料を免除すると伝えた[42]。これを受け、2009年10月16日、日本は互換漢字の追加提案を取り下げた[43]。
2010年3月31日、日本は取り下げた互換漢字の追加提案に代わってIVDへ登録を申請し[44]、2010年11月14日正式にHanyo-Denshiとして登録された[45]。
2010年12月6日、アドビ、イースト、ジャストシステム、大日本スクリーン、マイクロソフト、モリサワの6社共同で、IVSの普及推進を目的としてIVS技術促進協議会が設立された[46]。
2011年4月2日、UTCから簡体字をIVSで表す登録申請の準備をしていることが告知された[47]。しかしCJK統合漢字の既存の符号化モデルと矛盾する上に、21字中符号化済みの漢字が6字も含まれるというずさんな提案であり、IRG[48]・韓国[49]・イギリス[50]などから懸念が寄せられ、登録申請は中止された。
2012年1月31日、Unicode 6.1が制定。絵文字のテキストスタイルと絵文字スタイル切り替えのための異体字セレクタの組合せが登録された[51]。
2012年3月2日、IVDがバージョンアップ。Hanyo-DenshiとAdobe-Japan1のこれまで登録されていなかった異体字のうち一部が追加登録された[52]。
2013年9月30日、Unicode 6.3が制定。CJK互換漢字の字形コレクションがSVSに登録された[53]。
2014年5月16日、IVDがバージョンアップ。文字情報基盤整備事業のMoji_Johoが登録された[52]。
2016年6月21日、Unicode 9.0が制定。絵文字の追加等があった。
2016年8月15日、IVDがバージョンアップ。マカオ特別行政区のMSARGが登録された。日本以外が登録者のIVD登録は初である。
2017年12月12日、IVDがバージョンアップ。Moji_JohoとAdobe-Japan1で字形の組み合わせの追加があった他、韓国のKRNameが新たに登録された。
漢字の異体字セレクタに対応した実装には以下のようなものがある。
以下は和文フォントでの異体字セレクタへの対応状況である。
Unicodeの異体字セレクタに対応したフォントの作成に対応した (cmapテーブルのFormat 14の生成ができる) ツールには、以下のようなものがある。
FreeTypeの2007年10月以降の開発版には、フォントファイル内のcmapテーブルから異体字セレクタの情報を読み取るためのAPIが追加されている[71]。
JIS漢字コードの字形・字体の変遷を異体字セレクタを使用して表現した例を示す。フォントは游明朝体を使用した。
字形は、以下のWebサイトを参考とした。
JIS2004 | JIS2000 | JIS90 | JIS83 | 78JIS | Unicode | 備考 |
---|---|---|---|---|---|---|
茨 | 茨󠄀 | 茨󠄀 | 茨󠄀 | 茨󠄀 | 茨 | |
E0100 | E0100 | E0100 | E0100 | U+8328 | ||
飴 | 飴󠄀 | 飴󠄀 | 飴󠄀 | 飴 | 飴 | |
E0100 | E0100 | E0100 | U+98F4 | |||
辻 | 辻󠄀 | 辻󠄀 | 辻󠄀 | 辻 | 辻 | |
E0100 | E0100 | E0100 | U+8FBB | |||
葛 | 葛󠄀 | 葛󠄀 | 葛󠄀 | 葛 | 葛 | |
E0100 | E0100 | E0100 | U+845B | |||
芽 | 芽 | 芽 | 芽󠄀 | 芽󠄀 | 芽 | |
E0100 | E0100 | U+82BD | ||||
恢 | 恢󠄀 | 恢󠄀 | 恢󠄀 | 恢󠄁 | 恢 | |
E0100 | E0100 | E0100 | E0101 | U+6062 | ||
概 | 概 | 概 | 概󠄂 | 概󠄁 | 概 | |
E0102 | E0101 | U+6982 | ||||
厩 | 厩󠄀 | 厩󠄀 | 厩󠄃 | 厩󠄁 | 厩 | |
E0100 | E0100 | E0103 | E0101 | U+53A9 | ||
靭 | 靭 | 靭 | 靭 | 靱󠄁 | 靭, 靱 | JIS83で靭󠄁と字形交換。 |
U+976D | U+976D | U+976D | U+976D | U+9771 + E0101 | U+976D, U+9771 | |
靱 | 靱󠄀 | 靱󠄀 | 靱󠄂 | 靭󠄁 | 靱, 靭 | JIS83で靱󠄁と字形交換の後、字形も複数回変更。 |
U+9771 | U+9771 + E0100 | U+9771 + E0100 | U+9771 + E0102 | U+976D + E0101 | U+9771, U+976D | |
屢 | 屢※ | - | - | - | 屢 | ※ JIS2000からJIS2004で例示字形が変更されているが異体字セレクタで表現できない[注 6]。 |
U+5C62 |