Unicodeの互換文字
Unicodeの互換文字（ごかんもじ、）とは、ユニコードコンソーシアムが使わないことを推奨している、図形文字の一群である。UnicodeとUCSについて議論するときに言及されることが多い。
Unicodeコンソーシアムの用語集によると、既存の文字コードとの互換性と往復変換のためだけに収録された文字のことである。
しかし、定義はその用語集に表れているものよりも複雑である。ユニコードコンソーシアムが文字に与えている特性（）の1つとして、文字の分解や互換分解がある。ほとんどの文字はこの特性に値を持たないが、5千を超える文字に互換文字から1つかそれ以上の他の文字へ互換分解がある。Unicodeは分解特性が設定されている文字が互換文字であると定めている。これらの互換性を指示することの理由はさまざまであり、詳細は後述する。文字は1文字に「分解」される場合もあるので、分解という用語は混乱を招くことがある。この場合、1文字の分解は単に等価な（もしくはおおむね等価な）別の文字への置き換えである。
5,402種類のUnicode互換文字の互換分解特性には、互換文字を17の論理的なグループに分けるキーワードが含まれている。キーワードのないものは正準等価（）なもしくは正準分解可能な文字（）という用語で呼ばれる。これらの文字は最も近い関係を持つ。他のキーワードは以下のとおりである: 、、、、、、、、、、、、、、。これらのキーワードは、互換文字とその互換分解文字の並びとの間に存在する関係を暗示する。しかし、互換文字は — 正準であるかどうかを問わず — 3つの基本的なカテゴリに分けられる:
これらの意味的に異なる文字は他の文字のグリフと似たグリフで表示されることがあるので、テキスト処理ソフトウェアは起こりうる混乱を解決するようエンドユーザーのために努力すべきである。テキスト文字列の比較や照合（並べ替え）を行うとき、異なる字形や文字のリッチテキスト版がテキスト処理の結果を変えるべきではない。たとえば、ソフトウェアの利用者は大文字のラテン文字‘I’をページ上で検索したときに、そのソフトウェアが視覚的に類似したローマ数字の‘’を見つけられなかったら混乱するかもしれない。
互換文字の中には、テキスト処理や表示を行うソフトウェアにとってUnicode標準へ適合するためにまったく重要でないものも存在する。これらは以下の通り:UCS、Unicodeの文字特性とUnicodeのアルゴリズムはソフトウェア実装がこれらの文字を、その対応する分解から正しく表示するために必要なものをすべて提供する。そのためこれらの分解可能な互換文字は冗長で不必要なものとなる。それらが文字コードに存在することによって、テキストを正しく比較や照合するために余分なテキスト処理が必要になってしまう（Unicode正規化を参照）。しかも、これらの互換文字によって意味が追加されたり区別されたりすることはない。これらの文字にはテキスト描画処理とフォントがUnicode適合であるときに提供される描画結果との、視覚的な違いもない。さらに、これらの文字は他の文字コードとの往復変換のために必要なわけでもない。翻字によって、分解された文字を他の文字コードの対応する合成済み文字にマップできるからである。同様に、アラビア文字の語尾形のような文脈依存の字形は、その単語中の位置によって適切な従来文字コードの字形文字にマップできる。
これらの互換文字を捨てるために、テキスト処理ソフトウェアはいくつかのUnicodeの規約に適合しなければならない。ソフトウェアは以下のことができなければならない:
互換文字であると指定された5,402種類の文字のうち合計3,779文字が、不完全なUnicode実装のためにまとめて収録されている互換文字である。これらにはキーワード 、、、、、、、、、 を付けられた互換文字がすべて含まれる。さらに、ほとんどすべての正準分解とほとんどの  キーワードが付いた互換文字が含まれる （ キーワードが付いた文字のうち例外となるのは囲み英数字、囲み漢字および後続の節で述べるものである）。
他の互換文字の多くは、Unicodeがリッチテキストであると考え、それゆえUnicodeとUCSの目標から外れたものからなる。ある意味では前節で述べた互換文字 — 従来のソフトウェアが合字や縦書きテキストを表示するためのもの — でさえリッチテキスト形からなると言える。なぜならばリッチテキストの規約がテキストの表示される方法を決定するからである。しかし、テキストの表示に合字を使うか使わないかや縦書きと横書きのどちらを使うかの選択は、どちらも意味を含まないリッチテキストである。それらは単なるスタイルの違いである。これはのような斜体、上付き文字、下付き文字やリストマーカーのような、スタイルがそれに伴う何らかの意味を暗示する他のリッチテキストとは対照的である。
プレーンテキストの比較、照合、処理、格納の目的では、リッチテキストの変化形は意味的に冗長である。たとえば、上付き数字 4 の使用は標準の数字 4 を使ってからそれを上付きにするリッチテキスト規約を使うことと識別不可能な可能性が高い。このようなリッチテキストを代替する文字は、来往するプレーンテキスト文字にリッチテキストの整形を施したものと視覚的に区別がつかないので、曖昧さを作り出す。これらのリッチテキスト互換文字には以下のものが含まれる:以上のリッチテキスト互換文字のいずれについても、グリフの表示は通常その互換分解（関連）文字と異なる。しかし、これらは互換文字であるとみなされ、ユニコードコンソーシアムは使わないことを推奨している。なぜならばそれらはUnicodeがUCSと関連する規約によってサポートしようとしているプレーンテキスト文字ではないからである。リッチテキストはUnicodeの規約ではなく、HTML、CSS、RTF等々のUnicode以外の規約によって処理されるべきである。
リッチテキスト互換文字は5,402種類の互換文字のうち1,451種類を占める。キーワード  と  が付けられた互換文字は（以下に述べる意味的な違いのある3つを除けば）すべてこの中に含まれる;  と正規文字のうち空白の変種11種; および "Superscripts and Subscripts" ブロックにある、キーワード  と  が付けられたもののうちいくつか。
多くの互換文字は表現するグリフを他の文字と共有するかもしれないが、意味的には違いのある文字である。これらの文字のうちいくつかは、1つの用字系や表記体系に特化した他の文字コードのほとんどのために含まれている場合がある。たとえば、ISOや他のラテン文字集合はπ (pi) 用の文字を含んでいる可能性が高い。なぜならば、基本的に1つの表記体系や用字系に集中するとき、それらの文字コードはそうでもしなければよく使われる数学記号であるπ用の文字を含むことはないからである。しかし、Unicodeでは、数学者は世界中の既知の用字系から自由に文字を使ったり、数学的な集合や数学的な定数の代わりとして統合漢字を選択したりできる。今まで、Unicodeはごく少数の数学定数用に特定の意味的サポートを追加しただけである（たとえばプランク定数:ℎ U+210E やオイラー数:ℇ U+2107 はどちらもUnicodeが互換文字であると考えているものである）。そのためUnicodeはギリシア文字やヘブライ文字に基づくいくつかの数学記号を互換文字に指定している。これには以下のものが含まれる:これらの互換文字はその互換分解文字とは、名前に "symbol" が付けられているという点でのみ区別されるが、数式の表記においては長年異なる意味を表している。しかし、すべての現実的な目的ではそれらは互換等価なギリシア文字やヘブライ文字と同じ意味を共有している。これらは意味的に識別可能な文字の境界線上にあると考えられるので、互換文字の合計数には含めていない。
Unicodeはその他の字母に似た記号28種類も互換文字に指定している。加えて、いくつかの用字系は意味を区別するために上付きや下付きのグリフ位置を使う。これらの場合、上付き文字や下付き文字は単なるリッチテキストではなく、表記体系において — ダイアクリティカルマークと字母の混合と同様に — 異なる文字を構成する（合計130種）。最後に、Unicodeはローマ数字が同じグリフを共有するラテン文字と互換等価であると指定している。ここでUnicode標準はしばしば防ごうと努めてきた、グリフと文字の混同と同じ過ちを犯している。確かにこれらの文字が同じグリフを共有していた場合の視覚的な曖昧さを解決する必要はあるが、桁記号記数法の数字用である片方はラテン文字の大文字や小文字の‘i’とは確実に意味的な違いがある。同様の視覚的な曖昧さはラテン大文字A (U+0041) とギリシア大文字アルファ (Α U+0391) のような文字の間にもあるが、Unicodeはこれらの文字を統合していない。ローマ数字の1000は実際には同じ意味的な単位を表す第三の字形またはグリフを表現する第三の文字を持つ: One Thousand C D ( U+2180)。このグリフからは、ラテン文字 M 使用の慣習によって生ずるものを見られる。奇妙なことに、Unicodeは sign-value ローマ数字をまったく異なる（しかし視覚的には類似した）ラテン文字に統合しているが、インド・アラビアの位取り十進記数法に使われる数字はUCS全体を通して24回繰り返され（10種類の数字に合計240のコードポイントが使われ）、それらの間にはいかなる関係や分解マッピングも定義されていない。
互換文字の中に（18種類の合成済みローマ数字と11種類のヘブライ文字やギリシア文字に基づく記号に加えて）これら146種類の視覚的には類似しているが意味的に異なる文字が存在していることが、互換文字の話題を複雑にしている。内容の書き手は互換文字を使わないよう推奨することを提案している者もいる。しかし、特定の専門領域ではこれらの文字は重要であり、互換文字に混ざられなかった他の文字ときわめて類似している。たとえば、特定の学会においてはローマ数字の使用を同じグリフを共有するラテン文字と区別することには、楔形文字の数字と古代ギリシア文字の数字を区別することと違いがない。ローマ数字の文字をラテン字母の文字にまとめることは、意味的な違いを失わせる。同様の状況が上付きや下付きのグリフを使用する発音記号にも存在する。発音記号を使用する専門分野の学会では、書き手はリッチテキスト規約の助けを借りずに達成できるべきである。
いくつかのUnicode文字のブロックは完全に、もしくはほとんど完全に互換文字のみを含んでいる。これらの互換ブロックは意味的に違いのある互換文字を含んでいないので、推奨されない文字の集合へ曖昧さなしに分類できる。Unicodeはプレーンテキストの対応する互換分解を代わりに使用し、リッチテキストのマークアップで補完することを書き手に推奨している。このアプローチは、ひとつだけ例をあげれば丸付きや括弧付きの英数字の有限の集合を使うよりもはるかに柔軟で、制約が少ない。
しかし、互換ブロックに存在しながらそれ自身は互換文字ではなく、それゆえに書き手に混乱をもたらす可能性のある文字が少数存在する。"Enclosed CJK Letters and Months" ブロックは互換文字でない文字を1つ含んでいる: ‘韓国規格記号’ ( U+327F) である。この記号と 12 の他の文字が互換文字のブロックに含まれている理由は不明である。“CJK互換漢字”ブロックがこれらの互換漢字ではない統合漢字を含んでいる。
これら13種類の文字は互換文字でもなければ、いかなる意味で使用が非推奨なわけでもない。
これらのブロックに含まれる他の文字のいくつかは互換分解を持たないが、明らかに従来文字コードのサポートを意図している:
アルファベット表現形 (1)
アラビア文字表現形 (4)
CJK互換形（2種類、両方ともCJK統合漢字の U+4E36 丶 と関係）
囲み英数字（21のリッチテキスト変種）
正規化は、Unicodeに適合するソフトウェアがテキスト文字列の比較や照合を最初に行う互換分解の手続きである。これは、たとえば、利用者があるテキスト内で大文字小文字やダイアクリティカルマークを区別しない検索を行うときに必要とされる他の処理に似ている。このような場合ソフトウェアは通常同一視したり無視したりしない文字を同一視したり無視したりしなければならない。一般に正規化は構成する格納テキストのデータを変更することなしに行われる（可逆である）。しかし、ソフトウェアによっては正準等価な互換文字を、場合によっては正準等価でない互換文字さえも取り除く永久的な変更をテキストに加える可能性があるかもしれない（不可逆）。
用語の日本語表記は原則として次にならった。