BMP(基本多言語面)の中の文字グループの配置は次のようになっている(日本人のプログラマが気になりそうなグループだけあげてある).
領域 | 名称 | 備考 |
---|---|---|
0000-007F | Basic Latin | ASCIIと同じ. |
0080-00FF | Latin-1 Supplement | ISO 8859-1と同じ |
2E00-33FF | CJK表音文字と記号 | |
3400-9FFF | CJK統合漢字 | |
D800-DFFF | サロゲート | |
E000-F8FF | 私用 | いわゆる外字のための領域 |
F900-FFFD | 互換文字と特殊文字 | 他の文字コードとの可逆変換を実現するために取り入れた互換文字. Unicodeの他の文字と重複するが,あえて取り込まれている. |
ISO 10646の正規符号化方式であるUCS-4では,1面あたり256×256の文字が配置できる空間があり,これが256面×128グループもある. しかし,初期のUnicodeは世界中のすべての文字を最初の256×256文字分の範囲に詰め込もうと目論んでいた. 実際,このBMP範囲内には世界の主要言語で使われるすべての文字といってもいいほどの量の文字が詰め込まれていて, よほどかわったことをしようとしないかぎりは十分実現できそうに思える (この256×256の空間に世界中の文字を詰め込むという計画を実現するためのキーになったのが 中国・日本・韓国で使われていた見た目が微妙に違うけど本来同じ文字である文字をひとつに統合するCJK統合漢字というアイデア). このような経緯から,UCS-4の128×256×256×256の空間のうち,最初の256×256の面をBMP(基本多言語面)と呼ぶようになった. また,このBMP内の文字集合をUCS-2と呼んでいる.
UCS-2はUniversal Character Set 2オクテット(2バイト)の意味で文字集合の名前, BMPはBasic Multilingual Planeで,UCS-4のグループ×面×区×点という切り分けの観点から見た呼称,全部で128×256枚ある面の最初の1枚の面というニュアンス. 指してるものは同じ(だよね?)[参考 UCS] また,UTF-16というエンコーディング スキームはUCS-2と同じ16バイトなのだけど, サロゲートペアを使うことでBMPだけでなく,BMPを含む最初の16面内の文字を表現できるようにしている. [正確にはUTF-16は2バイトではなく,たいてい2バイト,ときどき(サロゲートペアを使うとき)1文字4バイトになる.]
256×256の全セル(点)に文字が詰め込まれているわけではなく,スキマがあいている(まだ文字が割りあたってないコードポイントが残っている). また,規格で明確にUnicode(およびISO 10646)に含まれないと既定されている値もある.
Unicodeの符号はFFFDで終わっていて,FFFEとFFFFは文字とはみなさない. FFFEはバイトオーダーマーク(文字としてはZERO WIDTH NO-BRAKE SPACE)のU+FEFFのエンディアンがひっくり返ったコードになっていて, エンディアンを判定するために利用できるようになっている. つまり,ファイルを開いて最初の2バイトを読んでみて,FFFEだったらエンディアンが逆だと判断し, U+FEFF ZERO WIDTH NO-BRAKE SPACEだったらエンディアンはあっていると判断する[参考].
Unicodeの外字エリア(Private Use Area; 私用領域)は下記の3つ.
Windows Shift-JIS のユーザー外字領域 0xF040〜0xF9FC は Unicodeの U+E000 〜 U+E757 に順番にマッピングされている.