国際化〜
特に、UCS-2 のコードを表すときに、U+hhhh という表現を使っています。U+A145 と 0xA145 は同義です。
UCS (Universal Character Set, ユニバーサル文字セット)
これまでの文字コードとの互換性をあきらめた、新しい文字コードの形態です。 制御コード領域 (0x00〜0x1F) をもフル活用しているので、Unicode 対応ソフトウェアでないと、テキストファイルをバイナリファイルと誤認します。
UCS-4 は、群(group)、面(plane)、区(row)、点(cell) の4バイト (31 bit) で構成され、膨大な数の文字を収録できます。最上位 の 1bit は使いません。
[(グループ)] x [(プレーン)] x [(区)] x [(点)]
00-7F 00-FF 00-FF 00-FF
------------ ------------ ---------------
128 グループ 256 プレーン 65536個のコード
全部で 128 個あるグループのうち、後半の 16 個(グループ0x60〜0x7F)は、プライベートエリアとして予約されています。また、グループ 0x00 の後半の 32 プレーン(0x60〜0x7F)もプライベートエリアとして予約されています。ここには外字を埋め込むことができます。
UCS-4 の 20億強もの膨大な領域にマッピングされた文字の一部を、Unicode は次のようにして扱います。
UCS-4 の区点 16 bitだけを扱う2バイト固定の文字コードです。U+0000 〜 U+FFFD まで 65534 個の文字が収録できます。CJK 統合漢字(China Japan Korea Unified Han Character)といって、日中韓の漢字約 5 万文字を似たものは同じ字としてみなし統合し、世界中の文字を 16bit で表現してしまいました。
(BMP, プレーン 0x00)
[グループ 0x00] x [プレーン 0x00] x [(区)] x [(点)]
00-FF 00-FF -> 65534 文字
UCS-4 のグループ 00 プレーン 00 を、特別に BMP (Basic Multilingual Plane、基本多言語面) と呼び、Unicode 1.1 は、その 先頭 0000 を省いた末尾 16 bit を使います。「1 文字 16 bit、固定長の文字コードだ」というのが売りで、プログラマが飛びつきました。
従来の文字コード体系(JIS、シフト JIS、EUC コード)と、Unicode 1.1 との相互変換には、巨大な変換テーブルを必要とします。
付録 BMP 地図
=========================================================================
0000 0000 A(Alphabet)領域--------------------------------------------
Latin-1 互換
0100 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
1000 ラテン、発音記号、ギリシア、キリル、アルメニア、ヘブライ
アラビア、インド、タイ、ラオ、グルジア、結合タイプハングル
2000 各種記号、罫線、仮名、結合文字(combining character)
3000
3400 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
4000 空き領域
5000 4E00 I(Ideograph)領域-------------------------------------------
6000 CJK(中国・日本・韓国)統合漢字
7000
8000
9000
A000 A000 O(Open)領域------------------------------------------------
B000 AC00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
C000
ハングル文字
D000
D800 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
サロゲート・ペア予約
E000 E000 R(Restricted)領域------------------------------------------
F000 予約領域 (外字)
F800 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
FFFD 半角カナ・全角英数など、他コードとの互換維持領域
=========================================================================
Unicode 1.1 + UTF-16
Unicode 1.1 では、32768 プレーンもある UCS-4 領域の、たった 1 プレーンにしかアクセスできませんでした。1 プレーン 65536 文字では、とても世界中の要望を満たすことが出来ません。そこで、Unicode 1.1 の空き領域をうまく使って、もう 16 プレーンだけアクセスが可能にしたのが、1996 年に制定された Unicode 2.0 です。その後 1998 年にわずかな修正が入って Unicode 2.1 となりました。
拡張された 16 プレーンにアクセスするために、サロゲート・ペア(surrogate pair, UTF-16) と呼ばれる仕組みを用います。UCS-2 の予約領域 D800h〜DFFFh の 2048 文字を組み合わせを使うのです。上位 2byte (D800h〜DBFFh) と 下位 2byte (DC00h〜DFFFh) をくみ合わせ、1024 文字 × 1024 文字 = 16面 × 65536 文字 が拡張されました。拡張できるということが決まっただけで、実際に何を拡張するのかは取り決められていません。
Unicode は、サロゲートペアの導入により、
Unicode 2.0 で拡張された、plane 1 〜 plane 16 までの約 100 万文字を実際に割り振る規格です。まだ詳しく決まっていません。
plane1に非漢字、plane2に漢字。plane14 の言語タグと異体字タグの問題。
異体字について。似たような漢字はたくさんあり、これらを全て収録することは現実的ではりません。旧字体などを欲しがる人は少数ですし、異体字があると検索のヒット率が下がってしまいます。ですので、似た文字はとことん統合してしまいます。さて異体字が実際に必要な場合は、異体字タグでつけることができます。