ミケネコ研究所 / 文字コードの部屋 / Unicode

Unicode

国際化〜

特に、UCS-2 のコードを表すときに、U+hhhh という表現を使っています。U+A145 と 0xA145 は同義です。


UCS-4

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 は次のようにして扱います。


Unicode 1.1 (UCS-2)

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 2.1

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 は、サロゲートペアの導入により、

2 bytes、4 bytes 混在の可変長コードとなります。このことは、Unicode は 16bit 固定長であることを信じて誘いに乗ってしまった人々らを憤慨させました。しかしよくよく考えてみれば、諸外国の異体字の要望を満たそうとするには、これがベターな方法であるとの見方で落ち着いています。


Unicode 3.0

Unicode 2.0 で拡張された、plane 1 〜 plane 16 までの約 100 万文字を実際に割り振る規格です。まだ詳しく決まっていません。

plane1に非漢字、plane2に漢字。plane14 の言語タグと異体字タグの問題。

異体字について。似たような漢字はたくさんあり、これらを全て収録することは現実的ではりません。旧字体などを欲しがる人は少数ですし、異体字があると検索のヒット率が下がってしまいます。ですので、似た文字はとことん統合してしまいます。さて異体字が実際に必要な場合は、異体字タグでつけることができます。


文字コードの部屋 http://mikeneko.creator.club.ne.jp/~lab/kcode/
お問い合わせ <lab@mikeneko.ne.jp>