web-dev-qa-db-ja.com

Unicodeでマッピングできる文字数は?

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

71

私は、ユニコードで可能なすべての有効な組み合わせの数と説明を求めています。

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

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

109,384コードポイントは、実際には nicode 6. で割り当てられます。

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

UTF-8でのこの制限の目的は、エンコードを作成することです 自己同期

反例として、中国語GB18030エンコーディングを検討してください。そこでは、文字ßはバイトシーケンス81 30 89 38として表され、数字0および8のエンコードが含まれています。したがって、このエンコード固有の癖のために設計されていない文字列検索機能がある場合、数字8を検索すると、文字ß内で誤検知が見つかります。

UTF-8では、先頭バイトと末尾バイトのオーバーラップがないため、短い文字のエンコードが長い文字のエンコード内で発生しないことが保証されるため、これは発生しません。

99
dan04

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

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

9
Simon Nickerson

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

5
Philipp

比phor的に正確な答えを与えるには、all of them

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

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

2

Unicodeはエンコードではなく、文字マッピングです。ウィキペディアによると、Unicodeには現在109242個の異なる文字が含まれています。

1
orlp

Unicodeの16進数は110000で、1114112です。

0
Dmitry Pleshkov