Unicode文字のマッピング
UnicodeやISO/IEC 10646には、単純計算で U+0000 ~ U+10FFFF の 1,114,112 = 220 + 216 個の符号位置がある。
Unicode 5.0.0の時点で、これらの符号位置のうち 102,012 (9.2%) が割り当て済みであり、ほかに 137,468 (12.3%) が#私用文字に、2,048 が#代用符号位置に予約されており、そして 66 が#非文字に指定され、872,582 (78.3%) が未割り当てのまま残されている。割り当てられた符号位置の数は以下のような構成である。
2,684 は特定のブロック内への割り当てのために予約されている。
98,893 は図形文字である。
435 は制御、整形、グリフ/文字の異体字選択用の#その他の特殊用途文字である。
(さらに詳細な内訳は#UCS文字割り当ての集計表を参照)
Unicodeの文字はさまざまな方法で分類できる。すべての文字は用字 (script) が割り当てられている。なお、たくさんの文字に「Common」(用字をまたがって共通に使う)、もしくは「Inherited」(隣接した文字から用字を受け継ぐ) という用字が割り当てられている。Unicodeにおける用字とは、字のみならず、その用字特有の句読点、ダイアクリティカルマーク、および他のマークや数字や記号をも含む一貫した書記体系である。一つの用字が一つかそれ以上の言語をサポートする。
文字は文字のブロックに割り当てられる。これらのブロックは通常8の倍数個の符号位置群である。多くは、たとえば128個か256個の符号位置のブロックにグループ分けされる。すべての文字は一般カテゴリ (general category) と下位カテゴリも割り当てられている。一般カテゴリは次の通り——字 (letter), マーク (mark)、数字 (number)、句読点 (punctuation)、記号 (symbol)、もしくは制御文字 (control; 言い換えると書式文字または非図形文字)。
文字のブロックは各種の面 (plane) に割り当てられている。現在ほとんどの文字は、最初の面である基本多言語面 (Basic Multilingual Plane) に割り当てられている。基本多言語面は2オクテットのみで指定可能であるため、これは従来のソフトウェアからの移行を容易にすることを助ける。最初の面に含まれない文字は通常きわめて特殊なものであるか、めったに使われない。
最初の256個の符号位置は、西洋でもっとも広く使われている8ビットの文字コードであるISO/IEC 8859-1のものに対応する。結果として、最初の128文字はASCIIとも等価である。Unicodeはこれらをラテン文字のブロックとして参照しているが、これらの2ブロックはラテン文字以外でも広く有用な文字を多数含む。
第0面(Plane 0)は、基本多言語面(英:Basic Multilingual Plane; BMP)であり、最もよく使う、基本的な文字・記号のほとんどが収録されている。
第1面(Plane 1)は、追加多言語面(英:Supplementary Multilingual Plane; SMP)であり、現在使うもののいない古代の用字系や人工文字など、基本多言語面に入りきらなかった文字のうち漢字以外を収録する。
第2面(Plane 2)は、追加漢字面(英:Supplementary Ideographic Plane; SIP)であり、基本多言語面に入りきらなかった漢字を収録する
第3面(Plane 3)は、第三漢字面(英:Tertiary Ideographic Plane; TIP)であり、追加漢字面に入りきらなかった漢字と、亀甲獣骨文字や金文などの現在使用されない漢字が収録される。
第14面(Plane 14)は、追加特殊用途面(英:Supplementary Special‐purpose Plane; SSP)であり、言語タグや異体字セレクタなどの制御コードが収録されている。
第15面(Plane 15)および第16面(Plane 16)は、私用面である。
いくつかの文字は図形表現を持たない制御文字と書式文字と完全な図形文字の間に分類される。
ソフトハイフン(Soft hyphen, U+00AD)、ワード接合子(Word Joiner, U+2060)、ゼロ幅接合子(Zero width joiner, U+200D)、ゼロ幅非接合子(Zero width non-joiner, U+200C)、ゼロ幅スペース(Zero width space, U+200B)、図形素結合子(結合可能)(Combining Grapheme Joiner, U+034F)
主に数学用に、不可視の区切り文字 (Invisible Separator, U+2063) は、句読点や空白が省略されうる文字間 (たとえば i⁣j のような二次元の添え字間など) の区切りを提供する。
不可視の乗算記号 (Invisible Times, U+2062) と関数適用 (Function Application, U+2061) は、数学的なテキストで項の乗算や関数適用が、演算を示すいかなるグリフも明示することなく行われている場合に有用である。
通常キーボード上のスペースバーで入力される空白文字 (U+0020) は、意味的には多くの言語における単語の区切りを提供する。歴史的な理由により、UCSには空白文字と互換等価な、幅の異なる空白も含まれる。これらの空白は以下のようなものである。
Space (U+0020)
En Quad (U+2000)
Em Quad (U+2001)
En Space  (U+2002)
Em Space (U+2003)
Three-Per-Em Space (U+2004)
Four-Per-Em Space (U+2005)
Six-Per-Em Space (U+2006)
Figure Space (U+2007)
Punctuation Space (U+2008)
Thin Space (U+2009)
Hair Space (U+200A)
Mathematical Space (U+205F)
ASCII由来の空白を除いた、他の空白類はすべて互換文字である。この文脈では、これらの文字は事実上テキストに意味的な内容を付け加えず、代わりにスタイルの制御を提供するという意味である。Unicode内では、この意味を持たないスタイルの制御はしばしばリッチテキストと呼ばれ、Unicodeが推進する目標の範囲外である。こういったスタイル化は、異なる文脈で異なる空白類を用いる代わりに、インテリジェントなテキストレイアウトソフトウェアを通じた処理によって実現できる。
いくつかの文字は改行の制御を助けるよう設計されている。これにはその場で改行しないことを促すもの (ノーブレーク文字) と、ソフトハイフン (U+00AD) のように改行することを促すものの両方がある。このような文字はスタイル用に設計されているが、これらの文字によって可能になる複雑な種類の改行は、おそらく必要不可欠である。
Soft Hyphen (U+00AD)
Non-breaking Hyphen (U+2011) - 改行しないハイフン
No-break Space  (U+00A0)
Narrow No-break Space (U+202F)
Zero width space (U+200B)
ホワイトスペース文字 (whitespace characters) は独立したグループの文字ではないが、代わりにUnicodeは相互運用をサポートするためにホワイトスペースであると見なす文字の一覧を提供する。ソフトウェアの実装によって、また他の標準によっては、この用語は多少異なった文字の集合を表すために使われていることがある。ホワイトスペース文字は通常プログラミング環境のために指定される。このようなプログラミング環境の下でこれらの文字はしばしば文法的な意味を持たず、機械のインタプリタによって無視される。Unicodeは古来の制御文字 U+0009 から U+000D および U+0085 をホワイトスペース文字に指定するのみならず、行区切り文字 (line separator) と段落区切り文字 (paragraph separator) を導入した。さらに基本の空白文字 (U+0020) もホワイトスペース文字に指定されているが、他のスタイル用空白文字は指定されていない。
UCSは100,000を超える私的利用の符号位置を含む。つまり、これらの符号位置には、ISOやユニコードコンソーシアム外の個人、組織、ソフトウェアベンダが固有の特性を持った文字を割り当ててよい。私用領域 (Private Use Area, PUA) は私的利用のために予約されている領域のひとつである。Unicode標準は、この範囲にいかなる文字も規定しない。
基本多言語面はU+E000 から U+F8FF (57344–63743) の範囲にPUAを含む。第15面 (U+F0000 から U+FFFFD)、および第16面 (U+100000からU+10FFFD) も完全に私的利用のために予約されている。
私用領域の使用はアジアのある文字符号化体系から受け継いだ概念であった。これらの体系は日本語の外字をアプリケーション固有の方法で符号化するための私用領域を持っていた。また、ConScript Unicode Registry (非公式でありユニコードコンソーシアムとは関係ない) はUnicodeにまだ符号化されていないか、符号化を却下された用字の私用領域へのマッピングを調整することを目的としている。Medieval Unicode Font Initiativeは私用領域を使って中世の文章に見られる各種の合字、合成済文字、および記号類を符号化している。
私用領域使用の一例として、AppleはアップルロゴにU+F8FFを使用している。
もっとも単純な水準では、UCSの各文字は符号位置と特定の意味的な役割を表現する。図形文字の場合、意味的な役割はしばしばその名前やその文字が含まれる用字系やブロックに暗示される。図形文字は文字の意味の定義を助ける推奨されるグリフを持つ場合もある。中国、日本、韓国、ベトナム、およびそれらの国々出身者の居留地で使われる漢字には、それ以外にも文字の意味的な役割の定義に関わる多数の豊富な特性 (property) がある。
しかし、UCSとUnicodeはその他の目的にその他の符号位置を指定している。それらの符号位置にはまったく、もしくはごく少数しか関連づけられた特性が存在しない。
U+D800 ~ U+DBFF と U+DC00 ~ U+DFFF の2,048個の符号位置は文字ではなく、サロゲートペア(代用対)に使う代用符号位置(Surrogate Code Point)となっている。上位側の表現に使う U+D800 ~ U+DBFF をHigh-Surrogate Code Point、下位側の表現に使う U+DC00 ~ U+DFFF をLow-Surrogate Code Pointと言う。
これらは常にHighとLowを対(ペア)にして利用する。
サロゲートペアが表す符号位置は以下の通り。
1000016 + (H - D80016) × 40016 + (L - DC0016)
上記の H と L は、それぞれHigh-Surrogate Code PointとLow-Surrogate Code Pointの数値である。
U+D800 ~ U+DBFFのHigh-Surrogate Code Pointの内、U+DB80 ~ U+DBFF は私用面に含まれる符号位置を表現することになるため、そのことを区別してHigh Private Use Surrogatesとも言う。
Unicodeは数個の符号位置を非文字 (noncharacters) として予約している。これらの符号位置には決して文字を割り当てられないことが保証されている。それゆえソフトウェア実装はこれらの符号位置を自由に内部使用できる。しかし、これらの非文字は決して実装間で交換されるテキストに含まれるべきではない。本質的に有用な非文字の一例は、符号位置U+FFFEである。この符号位置はバイト順マーク (U+FEFF) とバイト順序が逆である。もしテキストのストリームがこの非文字を含んでいたら、これはテキストのエンディアンを間違えて解釈していることのよい目印となる。