88

Unicodeで可能なすべての有効な組み合わせの数を説明付きで求めています。charは1、2、3、または4バイトとしてエンコードできることを知っています。また、その文字の開始バイトがどのくらいの長さであるかをクリアしても、継続バイトに制限がある理由もわかりません。

4

6 に答える 6

125

Unicode で考えられるすべての有効な組み合わせの数と説明を求めています。

1,111,998 : 17 プレーン × 1 プレーンあたり 65,536 文字 - 2048 サロゲート - 66非文字

UTF-8 と UTF-32 は、理論的には 17 をはるかに超えるプレーンをエンコードできますが、UTF-16 エンコードの制限に基づいて範囲が制限されることに注意してください。

Unicode 12.1 では、実際には137,929 個のコード ポイントが割り当てられています。

また、その文字の開始バイトがその長さをクリアしているにもかかわらず、継続バイトに制限がある理由もわかりません。

UTF-8 でのこの制限の目的は、エンコーディングを自己同期化することです。

反例として、中国語のGB 18030 エンコーディングを考えてみましょう。そこでは、文字ßはバイト シーケンスとして表されます。これには、数字と81 30 89 38のエンコードが含まれます。したがって、このエンコーディング固有の癖用に設計されていない文字列検索関数がある場合、数字を検索すると、文字内で誤検出が検出されます。088ß

UTF-8 では、リード バイトとトレイル バイトが重複しないため、長い文字のエンコーディング内で短い文字のエンコーディングが発生しないことが保証されるため、これは発生しません。

于 2011-05-08T14:36:13.367 に答える
10

Unicode では、それぞれ 65,536 文字 (または「コード ポイント」) の17プレーンを使用できます。これにより、合計 1,114,112 の可能な文字が得られます。現在、このスペースの約 10% しか割り当てられていません。

これらのコードポイントがどのようにエンコードされるかの正確な詳細はエンコードによって異なりますが、あなたの質問はUTF-8を考えているように聞こえます. 継続バイトの制限の理由はおそらく、次の文字の始まりを簡単に見つけられるようにするためです (継続文字は常に 10xxxxxx の形式ですが、開始バイトがこの形式になることはありません)。

于 2011-05-07T21:45:22.550 に答える
5

Unicode は 1,114,112 のコード ポイントをサポートします。2048 のサロゲート コード ポイントがあり、1,112,064 のスカラー値が得られます。これらのうち、66 の非文字があり、1,111,998 の可能なエンコードされた文字につながります (計算ミスを犯さない限り)。

于 2011-05-08T10:17:24.037 に答える
1

比喩的に正確な答えを与えるために、all of them

UTF-8エンコーディングの継続バイトにより、「ラインノイズ」に直面した場合に、エンコードされたオクテットストリームの再同期が可能になります。エンコーダーは、次のバイトが新しい文字ポイントの開始であることを知るために、0x80と0xBFの間の値を持たないバイトを前方にスキャンする必要があるだけです。

理論的には、現在使用されているエンコーディングでは、Unicode文字番号が最大31ビットの長さの文字を表現できます。実際には、このエンコードはTwitterなどのサービスに実装されており、最大長のツイートで最大4,340ビット相当のデータをエンコードできます。(140文字[有効および無効]、それぞれ31ビットを掛けます。)

于 2011-05-07T22:20:36.830 に答える
1

Wikipediaによると、Unicode 12.1 (2019 年 5 月にリリース) には 137,994 の異なる文字が含まれています。

于 2011-05-07T21:33:27.613 に答える
1

Unicode の 16 進数値は 110000、つまり 1114112 です。

于 2016-09-05T00:05:22.257 に答える