BMP 各文字グループの配置領域

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の他の文字と重複するが,あえて取り込まれている.

BMPとは

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バイトになる.]

0xFFFEと0xFFFFはUnicode文字ではない

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 に順番にマッピングされている.

References


はたいたかし
2016-07-26 外字・私用領域について追記.
2004-04-26 初稿.
Home > Dev > Unicode