Unicodeの符号空間

Unicodeの符号空間

[1] Unicode符号空間の利用についてです。

符号空間の構造

[17] Unicode は [ 0, 0x10FFFF ] の整数符号位置とし、 これに符号化文字を割り当てる方式としています。

[18] つまり Unicode符号空間0x10FFFF 以下非負整数の1次元です。

[19] ここで、

220 - 1 < 0x10FFFF < 221 - 1

です。すなわち21ビットあれば符号位置を相互に区別できます。 そこで Unicode は21ビットの符号と言われるわけです。

[22] ただし [ 0x110000, 221 - 1 ] は Unicode では使われていないことには注意が必要です。 Unicode は21ビットの符号とはいいつつ、21ビットをすべて使っている符号ではないわけです。


[23] Unicode符号位置整数で表せる単純な構造をしていますが、 これが他の符号化文字集合と比べて単純だ、複雑だと簡単に比較できるものではないことには注意が必要です。

[24] 整数1つで表せるのは符号位置であり、符号位置に割り当てられた文字です。 しかし、ここでいう文字とは 「Unicode文字と考えたもの」 です。 「他の符号化文字集合文字と考えたもの」 「一般人が文字と言われて思い浮かべるもの」 「文字学の専門家が文字として扱うもの」 とは必ずしも一致しません。定義が異なるものを単純、複雑と比較しても正確ではありません。

[25] 他の符号化文字集合では文字が1つで表せるものが、 Unicode では複数のUnicode文字を並べることで表される場合があります。 Unicode の符号空間は単純な構造だとしても、その単純な構造の要素である Unicode文字を実用するときは複雑に組み合わせなければならない場合があるのです。

[26] 文字表現モデルのどの部分で切り取るか次第で、 「Unicode は可変長の整数の列で表す複雑な符号空間を持つ」 とも言い表せるわけです。

符号位置

符号位置

Unicode 符号化文字集合

[46] Unicode には色々な文字が収録されています。

[57] Unicode は世界中の文字を収録しているとよくいわれますが、 含まれないものも多いです。 外字

[84] Roadmaps to Unicode® に将来構想があります。

字形

代表字形

Unicode非互換割当

[66] 相互運用性の問題は個々にいろいろありますが、 文字の割当のレベルでもいろいろあります。

[67] Unicode 符号化文字集合相互運用性

[68] 初期 Unicode では O-zone [ U+A000, U+DFFF ] が未使用のまま空いていたので、 都合よく使えそうな領域として狙われていたのですね。

[69] 00162 | ⿰亻庚 | WS2021v5.0, https://hc.jsecs.org/irg/ws2021/app/?id=00162

This character is also needed as the personal name character in ROK, which is included in one modern internal system in ROK as U+A0100.

[70] >>69 「one modern internal system in ROK」というのが何かわからないが (名前を出していないのは非公開だから?)、 GB 18030 以外にも空き領域を勝手に使っているシステムが動いてるということか。 同じサイトでこの文言で検索するといくつか出てくるが、他の例は U+Fhhhh

[78] >>77 に示された

Character code system used by the Supreme Court of South Korea (as of 2023-02-01) 韓國最高法院漢字系統用字

は A0000 - A02DA, F0000 - F34BD の文字を示しています。 Unicode符号位置だとすると後者は PUA ですが、前者は勝手割当でしょうか?

[80] そしてその >>78 に含まれる文字の1つ、 A0100 >>79 がまさに >>69 ですね。

[71] GJKV 全部勝手に使ってて草、T もそういうのやってるんか?

制御文字

[11] Unicode はそれ自身が規定しない C0C1制御文字を使えると定めています。 制御文字

[12] Unicode では ISO/IEC 2022 エスケープシーケンスISO/IEC 6429 制御機能も使えます。 ただし Unicode ではこれらは符号構造に組み込まれたものではなく Unicode文字の列に過ぎないという解釈を採用しています。 制御文字

サロゲート

[10] サロゲート符号位置UTF-16符号単位としてのみ使うことができ、 Unicode文字列には出現することはない、というのが原則ですが、実際にはしばしば紛れ込みます。 サロゲート, WTF-16, DOMString

U+10FFFF の先

[2] [ U-00110000, U-7FFFFFF ] はかつて ISO/IEC 10646 で普通に存在していましたが、 UnicodeU+10FFFF までとしたために、 ISO/IEC 10646 からもこの領域は削除されてしまいました。

[4] UCS-4, UTF-1, UTF-8 (当初仕様) などで符号化できます。

[3] 削除以前からの実装などはこの領域に対応していることがあります。

[5] 当時はこの領域の中に私用の領域がありました。それを使っていた実装もありました。 PUA

[7] EmacsU-003FFFFF まで対応しています。 utf-8-emacs

[8] 文字列の内部の処理の一時的な符号文字列に混在する文字以外のオブジェクトの位置の表現などで、 Unicode文字列の入出力に絶対に出現することがないこの領域が使われる場合があります。

[9] 非文字と似ていますが、非文字はこの用途には少なすぎることも多いです。

U-7FFFFFFF の先

[15] UCS-4 は32ビット符号ですが、最上位1ビットを内部処理等のために使用しないことにしています。 mohta bit

[16] UTF-8 は符号構造上 U-7FFFFFFF よりも大きな値を表せるように自然に拡張できます。

[6] Perlutf8 は上限がアーキテクチャー依存で、 U-FFFFFFFF より大きな値も扱えます。 use utf8

独自式サロゲート

[13] Shift-MojikyoPUA符号位置を2つ組合せて文字の領域を創出しています。

GB 18030

[14] GB 18030 には符号構造上存在するものの Unicode符号位置との対応関係が定められていない領域があります。

メモ