UnicodeについてはWin98あたりから採用になった2バイト文字コードという程度の認識しかなかったのですが、PCREのドキュメントの中でUTF-8というのが出てきたので少し調べてみました。今さらですが、どうもややこしいもののようですね。特にサロゲート(surrogate)のあたりが「ズル」っぽいです。そもそもjapaneseセットという「ひとくくり」がないのが非常にわかりづらく思えます。    つまり、こんな感じでしょうか。  ------------------------------------------------------  Unicodeは1+16(=17)個のプレーンを持つ。  一つのブレーンは0x0000〜0xFFFFで表わされる256*256(=65,536)個のコード領域を持つので、全体では256*256*17個のコード領域となる。    はじめのプレーンの0xFF * 0xF7、つまり256個*248個(=63,488個)の部分をBMP(Basic Multilingual Plane)あるいはプレーン00と呼ぶ。(すでにこの辺りからして言葉の使い方があやしい)    はじめのプレーンの残りの部分の0xFF * 0x08、つまり256個*8個(=2,048個)の部分はサロゲート(surrogate)と呼ばれる。    よって、はじめのプレーンはBMP部分とサロゲート部分から構成される。     このサロゲートの部分は、そのままコード領域として使うと2,048個にしかならないが、上位1,024個と下位1,024個に分けてアドレスを指すと考えるると、1024*1024(=1,048,576)種類の場所をポイントできる。  -----------------------------------------------------  すでにUnicode 3.1でプレーンを超えた領域に文字がアサインされていますが、このサロゲートの考え方は、UTF-16の時しか関係ないような気もします。    確かC++ Builderではwchar_tがunsigned shortだったような気がするので、その世界でのワイルド文字(Unicode)という言葉が指しているのは、UTF-16か、サロゲートなしのUTF-16(UCS-2?)のことなのでしょうか。このあたりはまだよくわかりません。    【今日の日経平均】 10,177 -30
|
|