21

Unicode コード ポイントの最大数を知るために多くの記事を読みましたが、最終的な答えは見つかりませんでした。

UTF-8 UTF-16 および UTF-32 エンコーディングのすべてが同じ数のコード ポイントを処理できるようにするために、Unicode コード ポイントが最小化されていることを理解しました。しかし、このコードポイントの数は何ですか?

私が遭遇した最も頻繁な答えは、Unicode コード ポイントが 0x000000 から 0x10FFFF (1,114,112 コード ポイント) の範囲にあるというものですが、他の場所で 1,112,114 コード ポイントであることも読みました。与えられる数字は 1 つですか、それとも問題はそれよりも複雑ですか?

4

3 に答える 3

49

Unicode で有効な最大コード ポイントは U+10FFFF であり、21 ビット コード セットになります (ただし、すべての 21 ビット整数が有効な Unicode コード ポイントであるとは限りません。具体的には、0x110000 から 0x1FFFFF までの値は有効な Unicode コード ポイントではありません)。

これが、数値 1,114,112 の由来です: U+0000 .. U+10FFFF は 1,114,112 の値です。

ただし、UTF-16 の代理である一連のコード ポイントもあります。これらは U+D800 .. U+DFFF の範囲にあります。これは、UTF-16 用に予約されている 2048 コード ポイントです。

1,114,112 - 2,048 = 1,112,064

66 の非文字もあります。これらは正誤表 #9で部分的に定義されています: U+nFFFE および U+nFFFF の形式の 34 個の値 ( nは値 0x00000、0x10000、… 0xF0000、0x100000)、および 32 個の値 U+FDD0 - U+FDEF。これらも差し引くと、割り当て可能な文字数は 1,111,998 になります。「私的使用」のために予約された 3 つの範囲があります: U+E000 .. U+F8FF、U+F0000 .. U+FFFFD、および U+100000 .. U+10FFFD。実際に割り当てられる値の数は、表示している Unicode のバージョンによって異なります。最新バージョンに関する情報は、Unicode Consortiumで見つけることができます。とりわけ、そこの序文には次のように書かれています。

Unicode 標準、バージョン 7.0 には、112,956 文字が含まれています

したがって、使用可能なコード ポイントの約 10% しか割り当てられていません。

コード ポイントの数として 1,112,114 を見つけた理由を説明できません。

ちなみに、上限 U+10FFFF が選択されているのは、Unicode のすべての値を UTF-16 の 1 つまたは 2 つの 2 バイト コーディング単位で表現できるようにするためです。1 つの上位サロゲートと 1 つの下位サロゲートを使用して、BMP または Basic 以外の値を表します。 U+0000 .. U+FFFF の範囲の多言語面。

于 2014-12-11T05:32:29.800 に答える
4

はい、UTF-16 で表現できないすべてのコード ポイント (サロゲートの使用を含む) は無効であると宣言されています。

U+10FFD が最高のコード ポイントのようですが、サロゲートである U+00FFFE と U+00FFFF は使用可能なコード ポイントではないため、合計数は少し低くなります。

于 2014-12-11T05:30:06.033 に答える