1

こんにちは、スタック オーバーフロー コミュニティです。

UTF-16 は、2 バイトの文字セットまたは 4 バイトの文字セットです。

私が理解しているように、4 バイト文字セットは、high(16) と low(16) のサロゲートで構成されています。

UTF-8 は、1 バイト、2 バイト、3 バイト、4 バイト、または最大 7 バイトのいずれかです。

しかし、最初のオクテットのビットを見れば、UTF-8 からのバイト数を簡単に知ることができます。

UTF-16 と UTF-32 からのバイト サイズをどのように特定するのだろうか。

Unicode に関する皆様のご支援とご意見をお待ちしております。

ありがとう。

ドンソプ

4

1 に答える 1

3

UTF-8

これは、コードポイントの値に応じて、コードポイントごとに 1、2、3、または 4 バイトを使用します ( UTF-16 の最大値よりも高いコードポイントをエンコードできるため、UTF-16 との互換性を維持するために、 RFC 3629 では5 バイト以上のバリエーションは許可されていません)。 U+10FFFF のコードポイント)。最初のバイトの上位ビットを分析すると、その最初のバイトを含む、シーケンス内の合計バイト数がわかります。

  1. 上位ビットが 0 の場合、バイトの数値はコードポイントの値です。

  2. 上位 2 ビットが 1 で上位 3 番目のビットが 0 の場合、コードポイント値は 2 バイトにまたがります。次のバイトは、上位ビットを 1 に設定し、上位 2 番目のビットを 0 に設定する必要があります。そうしないと、シーケンスの形式が正しくありません。

  3. 上位 3 ビットが 1 で上位 4 番目のビットが 0 の場合、コードポイント値は 3 バイトにまたがります。次の 2 バイトは、上位ビットを 1 に設定し、上位 2 番目のビットを 0 に設定する必要があります。そうしないと、シーケンスの形式が正しくありません。

  4. 上位 4 ビットが 1 で上位 5 番目のビットが 0 の場合、コードポイント値は 4 バイトにまたがります。次の 3 バイトは、上位ビットを 1 に設定し、上位 2 番目のビットを 0 に設定する必要があります。そうしないと、シーケンスの形式が正しくありません。

  5. 5 つ以上の上位ビットが 1 に設定されている場合、シーケンスの形式が正しくありません。


UTF-16

これは、コードポイントの値に応じて、コードポイントごとに2 または 4 バイトを使用します。最初の 2 バイトの数値を分析すると(ビッグ/リトル エンディアンを考慮して)、それらの最初の 2 バイトを含むシーケンス内の合計バイト数がわかります。

  1. 数値が 0x0000..0xD7FF または 0xE000..0xFFFF の範囲にある場合、それはコードポイント値です。

  2. 数値が 0xD800..0xDBFF の範囲にある場合、コードポイント値は 4 バイトにまたがります。最初の 2 バイトは上位サロゲートです。次の 2 バイトの数値は、下位サロゲートの 0xDC00..0xDFFF の範囲内にある必要があります。そうでない場合、シーケンスの形式が正しくありません。

  3. 数値が 0xDC00..0xDFFF の範囲にある場合、シーケンスの形式が正しくありません。


UTF-32

これは、コードポイントごとに常に4 バイトです。4 バイトの数値 (ビッグ/リトル エンディアンを考慮) がコードポイント値です。

于 2015-12-23T03:49:46.090 に答える