[1] 
[[Unicode]] の[[符号空間]]の利用についてです。

* 仕様書

[REFS[
- [36] [CITE[[[The Unicode Standard]], Version 13.0 - ch02.pdf]], [TIME[2020-03-09T17:53:32.000Z]], [TIME[2020-12-20T08:35:03.323Z]] <https://www.unicode.org/versions/latest/ch02.pdf#G25564>
- [37] [CITE[[[The Unicode Standard]], Version 13.0 - ch03.pdf]], [TIME[2020-03-09T17:53:34.000Z]], [TIME[2020-12-20T02:08:18.239Z]] <https://www.unicode.org/versions/latest/ch03.pdf#G2212>
]REFS]

* Unicode 符号空間

[38] 
[DFN[[RUBYB[符号空間][codespace]]]]は、
[[抽象文字]]を[[符号化]]するための[[整数]]の[[範囲]]です。
[SRC[>>36]]

[39] 
[DFN[Unicode[RUBYB[符号空間][codespace]]]]は、
[ [N[0]], [N[0x10FFFF]] ]
の範囲の[[整数]]です。
[SRC[>>37 D9]]

[40] 
[[Unicode符号空間]]上の値を[[符号点]]、[[符号位置]]といいます。

[41] 
[[Unicode符号空間]]中のいくつかの重ならない[[範囲]]には、
[[ブロック]]として名前が与えられています。


* 符号空間の構造

[17] 
[[Unicode]] は [ [N[0]], [N[0x10FFFF]] ] の[[整数]]を[[符号位置]]とし、
これに[[符号化文字]]を割り当てる方式としています。

[18] 
つまり 
[[Unicode]] の[[符号空間]]は [N[0x10FFFF]] [[以下]]の[[非負整数]]の1次元です。


[19] ここで、

[FIG(math)[
2[SUP[20]] - 1 < [N[0x10FFFF]] < 2[SUP[21]] - 1
]FIG]

です。すなわち21ビットあれば[[符号位置]]を相互に区別できます。
そこで '''[[Unicode]] は21ビットの[[符号]]'''と言われるわけです。

[22] 
ただし [ [N[0x110000]], 2[SUP[21]] - 1 ] は [[Unicode]]
では使われていないことには注意が必要です。
[[Unicode]] は21ビットの[[符号]]とはいいつつ、21ビットをすべて使っている[[符号]]ではないわけです。

-*-*-

[23] 
[[Unicode]] は[[符号位置]]を[[整数]]で表せる単純な構造をしていますが、
これが他の[[符号化文字集合]]と比べて単純だ、複雑だと簡単に比較できるものではないことには注意が必要です。

[24] 
[[整数]]1つで表せるのは[[符号位置]]であり、[[符号位置]]に割り当てられた[[文字]]です。
しかし、ここでいう[[文字]]とは 
「[[Unicode]] が[[文字]]と考えたもの」
です。
「他の[[符号化文字集合]]が[[文字]]と考えたもの」
「一般人が[[文字]]と言われて思い浮かべるもの」
「[[文字学]]の専門家が[[文字]]として扱うもの」
とは必ずしも一致しません。定義が異なるものを単純、複雑と比較しても正確ではありません。

[EG[
[25] 
他の[[符号化文字集合]]では[[文字]]が1つで表せるものが、
[[Unicode]] では複数の[[Unicode文字]]を並べることで表される場合があります。
[[Unicode]] の符号空間は単純な構造だとしても、その単純な構造の要素である
[[Unicode文字]]を実用するときは複雑に組み合わせなければならない場合があるのです。

[26] 
[[文字]]表現モデルのどの部分で切り取るか次第で、
「[[Unicode]] は可変長の[[整数]]の列で表す複雑な[[符号空間]]を持つ」
とも言い表せるわけです。
]EG]

[SEE[ [[Unicode文字]], [[結合文字]], [[書記素クラスター]], [[国旗絵文字]], [[タグ文字]], [[shaping]], [[文字のレンダリング]], [[VS]] ]]


[EG[

[48] 
[[国旗絵文字]]は、2つの[[Unicode文字]]を組合せて1つの[[国旗]]を表します。
「[[Unicode]] が数値1つで1つの文字を表す単純な構造」
というときの「数値1つ」は国旗の片割れであり、
[[人間]]が認識する「文字」ではない、意味のない何かでしかありません。


]EG]

* 符号位置

[SEE[ [[符号位置]] ]]

* Unicode 符号化文字集合

[46] [[Unicode]] には色々な[[文字]]が収録されています。


[FIG(short list)[
- [[ASCII]]
- [[ISO/IEC 8859]]
- [[ラテン文字]]
- [[ギリシャ文字]]
- [[キリル文字]]
- [[ビルマ文字]]
- [[Unicodeジョージア文字]]
- [[Unicodeエチオピア文字]]
- [[仮名]]
- [[CJK統合漢字]]
- [[CJK互換漢字]]
- [[絵文字]]
- [[IDC]]
- [[タグ文字]]
- [[全角文字]]
- [[半角文字]]
- [[私用域]]
]FIG]

[57] 
[[Unicode]]
は世界中の文字を収録しているとよくいわれますが、
含まれないものも多いです。
[SEE[ [[外字]] ]]

[84] 
[CITE[[[Roadmaps to Unicode®]]]]
に将来構想があります。

** 字形

[SEE[ [[代表字形]] ]]




* Unicode非互換割当







[66] 
[[相互運用性]]の問題は個々にいろいろありますが、
[DFN[文字の割当のレベル][Unicode非互換割当]]でもいろいろあります。

[FIG(list)[ [67] [[Unicode]] [[符号化文字集合]]の[[相互運用性]]

- [[Unicode]] の[[非互換変更]]
-- [[Unicode 1.0]]
-- [[Korean mess]] ([ [CODE[U+3400]], [CODE[U+4DFF]] ] / [ [CODE[U+AC00]], [CODE[U+D7A3]] ])
-- [[phi mess]]
-- [[Unicodeビルマ文字]]
- [[私用]]が認められた事例
-- [[私用域]]
-- [[国旗絵文字]]の[[私用]]の[[国符号]]
-- [[Unicode言語タグ]]の[[私用]]の[[言語タグ]]
-- [[制御文字集合]]
-- [[非文字]]
- 暫定的な (勝手な) 割当がそのまま使われる事例
-- [CODE[V+]]
--- [[TCVN 5773]] ([ [CODE[U+A000]], [CODE[U+A6EE]] ])
--- [[字喃]] ([ [CODE[U+60000]], [CODE[U+63FFF]] ])
-- [[JIS X 0213:2000]] [[カッコ付きUCS]] 
([[非漢字]],
[ [CODE[U+AA00]], [CODE[U+ABFF]] ],
[[CJK互換漢字]])
-- [[住基ネット統一文字]] [CODE[J+]]
([[カッコ付きUCS]], [ [CODE[U+AC00]], [CODE[U+D7A3]] ])
-- [[未成IVC]]
-- [[注音IVS字型規格]]
-- [[Unicodeエチオピア文字]]
- [[GB 18030-2022]] 改正案 (第10面)
- [[DVB-HTML]]
- [[GSCII zone]]
- [[Unicode zone]] 追加文字
- [[Unicodeギリシャ文字]]
- [[Unicodeジョージア文字]]
- [[Zawgyi]]
- [[ISO/IEC 646の版]]
- [[フォント依存符号化]]

]FIG]

[68] 
初期 [[Unicode]] では
[[O-zone]] [ [CODE[U+A000]], [CODE[U+DFFF]] ]
が未使用のまま空いていたので、
都合よく使えそうな領域として狙われていたのですね。

[69] [CITE[00162 | ⿰亻庚 | WS2021v5.0]], [TIME[2023-07-13T07:51:18.000Z]] <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+F[VAR[hhhh]]。


-[77] [CITE@zh[⿰壬奐: zi.tools]], [TIME[2024-09-18T02:43:36.000Z]] <https://zi.tools/zi/%E2%BF%B0%E5%A3%AC%E5%A5%90?secondary=character_set&set=K%E6%B3%95%E9%99%A2>
- [90] 
[CITE@ja[whj.pdf]], [TIME[2023-02-03T23:33:45.000Z]], [TIME[2025-08-05T05:16:21.028Z]] <https://babelstone.co.uk/CJK/whj.pdf#page=427>

[78] >>77 に示された

>Character code system used by the Supreme Court of South Korea (as of 2023-02-01) 韓國最高法院漢字系統用字

は A0000 - A02DA, F0000 - F34BD の文字を示しています。 [[Unicode符号位置]]だとすると後者は 
[[PUA]] ですが、前者は勝手割当でしょうか?

- [79] [CITE@zh[⿰亻庚: zi.tools]], [TIME[2024-09-18T03:28:40.000Z]] <https://zi.tools/zi/%E2%BF%B0%E4%BA%BB%E5%BA%9A?secondary=character_set&set=K%E6%B3%95%E9%99%A2>

[80] そしてその >>78 に含まれる文字の1つ、 A0100 [SRC[>>79]] がまさに >>69 ですね。



[71] GJKV 全部勝手に使ってて草、T もそういうのやってるんか?


[44] 
[CITE@en[Unicode/Last at main · MY1L/Unicode · GitHub]], [TIME[2026-02-03T08:11:52.000Z]] <https://github.com/MY1L/Unicode/tree/main/Last#user-content-%E4%B8%80%E8%A7%88>

[45] >>44 は実字形の[[フォント]]ではなく、実フォントがないときに使われる代替字形を収めたフォントですが、
0xA 面の領域には [[GB 18030]] 案の独自の漢字割当に基づく字形が割り当てられています。


[49] 
[[PUA]] には単独の文字 ([[基底文字]]) の他に、他の文字との組合せで機能する[[文字]]や[[文字のようなもの]]が割り当てられることもあります。
[SEE[ [[PUA]], [[結合文字]], [[VS]], [[サロゲート]] ]]




* 制御文字

[11] 
[[Unicode]] はそれ自身が規定しない [[C0]] や [[C1]] の[[制御文字]]を使えると定めています。
[SEE[ [[制御文字]] ]]

[12] 
[[Unicode]] では [[ISO/IEC 2022]] [[エスケープシーケンス]]や
[[ISO/IEC 6429]] [[制御機能]]も使えます。
ただし [[Unicode]] ではこれらは[[符号]]構造に組み込まれたものではなく
[[Unicode文字]]の列に過ぎないという解釈を採用しています。
[SEE[ [[制御文字]] ]]

* サロゲート

[10] [[サロゲート符号位置]]は [[UTF-16]] の[[符号単位]]としてのみ使うことができ、
[[Unicode文字列]]には出現することはない、というのが原則ですが、実際にはしばしば紛れ込みます。
[SEE[ [[サロゲート]], [[WTF-16]], [[DOMString]] ]]

[33] 
内部処理のため、本来の[[サロゲートペア]]としての利用以外の目的で使われる事例もあります。
[SEE[ [[サロゲート]] ]]

** 独自式サロゲート



[47] 
[[Unicode]] の[[サロゲート符号位置]]の他に、 [[PUA]] の独自の[[符号位置]]の[[サロゲート]]類似機構の事例もあります。



[13] 
[[Shift-Mojikyo]] は [[PUA]] の[[符号位置]]を2つ組合せて文字の領域を創出しています。


;; [28] 
独自 [[VS]] はやっていることは似ていますが、考え方が違います。
[SEE[ [[VS]] ]]



* [CC[U+10FFFF]] の先

[2] 
[ [CC[U-00110000]], [CC[U-7FFFFFF]] ]
はかつて [[ISO/IEC 10646]]
で普通に存在していましたが、
[[Unicode]] が [CC[U+10FFFF]] までとしたために、
[[ISO/IEC 10646]] からもこの領域は削除されてしまいました。

[4] 
[[UCS-4]], [[UTF-1]], [[UTF-8]] (当初仕様) などで[[符号化]]できます。

[3] 
削除以前からの実装などはこの領域に対応していることがあります。

[5] 
当時はこの領域の中に[[私用]]の領域がありました。それを使っていた実装もありました。
[SEE[ [[PUA]] ]]

[7] 
[CITE[Emacs]] は [CC[U-003FFFFF]] まで対応しています。 
[SEE[ [[utf-8-emacs]] ]]


[8] 
[[文字列]]の内部の処理の一時的な[[符号]]や[[文字列]]に混在する[[文字]]以外の[[オブジェクト]]の位置の表現などで、
[[Unicode文字列]]の入出力に絶対に出現することがないこの領域が使われる場合があります。

;; [9] [[非文字]]と似ていますが、[[非文字]]はこの用途には少なすぎることも多いです。

[32] 
[[i18n Arena internal encoding]] は独自の[[符号空間]]に
[[UCS-2]] と他の[[符号化文字集合]]を取り込んだ[[内部符号]]という建付けですが、
[[UCS-4]] の[[私用域]] (当時) に他の[[符号化文字集合]]を割り当てているとの見方もできます。

[42] [[通信用語の基礎知識V6フォーマット]]  [SRC[>>43]] :  

>    番号はUnicodeで、0~7fffffffまでの範囲である。



[REFS[

- [43] 
[CITE[null]], [TIME[2014-10-24T14:04:00.000Z]], [TIME[2025-11-05T08:23:26.190Z]] <https://www.wdic.org/file/dic6form.txt>

]REFS]

* [CC[U-7FFFFFFF]] の先

[15] 
[[UCS-4]] は32ビット符号ですが、最上位1ビットを内部処理等のために使用しないことにしています。
[SEE[ [[mohta bit]] ]]

[16] 
[[UTF-8]] は符号構造上 [CC[U-7FFFFFFF]] よりも大きな値を表せるように自然に拡張できます。

[6] 
[CITE[Perl]] の [CODE[utf8][use utf8]] は上限が[[アーキテクチャー]]依存で、
[CC[U-FFFFFFFF]] より大きな値も扱えます。
[SRC[>>27]]
[SEE[ [[use utf8]] ]]

[35] 
[[UTF-128]] は128ビット符号に拡張し [[IPv6アドレス]]と統合しています。

[29] 
[[UCS-X]] ([[UCS-∞]]) は無限大まで拡大しています。


[REFS[

-
[27] 
[CITE@en[perlunicode - Unicode support in Perl - Perldoc Browser]], [TIME[2025-09-17T13:35:30.000Z]] <https://perldoc.perl.org/perlunicode#Beyond-Unicode-code-points>

]REFS]



* Unicode を取り込んだ符号


[30] 
[[Unicode]] の拡張とは逆に、 [[Unicode]] を使える[[符号]]は、
[[符号空間]]を拡張して [[Unicode]] を取り込んだ巨大な[[符号空間]]を持つと理解できます。


[SEE[ [[ISO/IEC 2022]] ]]

;; [31] [[Unicode]] の一部分だけ包含するものは除く。

[34] 
[[双漢代碼]]は [[JIS X 0208]] に [[Unicode]] を組合せたものですが、
[[Unicode]] とは別に [[MJ+]] を追加しています。 ([[MJ+]] は [[PUP]]
を使っていますが、 [[MJ+]] と [[MJ+]] ではない [[PUP]] を共存させています。)


** GB 18030

[14] 
[[GB 18030]] は [[Unicode]] の全体を取り込んでいますが、
それに加えて、
[[符号構造]]上存在するものの [[Unicode符号位置]]との対応関係が定められていない領域があります。

[50] 
一部は [[PUA]] として解放されており、
残りは未利用のままとなっています。



* 関連

[SEE[ [[非Unicode文字]] ]]

[SEE[ [[文字のようなもの]] ]]

* メモ
