4

char のサイズは : 2 ( msdn )

sizeof(char)  //2

テスト :

char[] c = new char[1] {'a'};

Encoding.UTF8.GetByteCount(c) //1 ?

なぜ値は1ですか?

(もちろん、c が 'ש' のような Unicode char の場合、2 が表示されます。)

a.net char ではありませんか?

4

3 に答える 3

14

これは、「a」が UTF-8 でエンコードするのに 1 バイトしかかからないためです。

Encoding.UTF8.GetByteCount(c)指定された文字配列をUTF-8でエンコードするのに必要なバイト数がわかります。詳細については、ドキュメントを参照しEncoding.GetByteCountてください。charこれは、.NET の内部での型の幅とはまったく別のものです。

コード ポイントが 128 未満の各文字 (つまり、U+0000 から U+007F) は、UTF-8 でエンコードするのに 1 バイトかかります。

他の文字は、UTF-8 で 2、3、または 4 バイトを使用します。(エンコードに 5 バイトまたは 6 バイトかかるU+1FFFF を超える値がありますが、それらは現時点では Unicode の一部ではなく、おそらくこれからもありません。)

charUTF-8 でエンコードするのに 4 バイトを必要とする唯一の文字は、とにかく単一でエンコードできないことに注意してください。Acharは UTF-16 コード単位であり、U+FFFF を超える Unicode コード ポイントは、それらを表すサロゲート ペアを形成する 2 つの UTF-16 コード単位を必要とします。

于 2012-05-10T19:20:57.240 に答える
4

不公平だ。あなたが言及するページは言う

charキーワードは、Unicode文字を宣言するために使用されます

次に試してください:

Encoding.Unicode.GetByteCount(c)
于 2012-05-10T19:23:17.193 に答える
4

その理由は、内部的に、.NET は文字を UTF-16 として表し、各文字は通常 2 バイトを占めるためです。一方、UTF-8 では、各文字が最初の 128 個のコードポイント (偶然にも ASCII と重複する) 内にある場合は 1 バイトを占め、それを超えると 2 バイト以上を占めます。

于 2012-05-10T19:22:00.887 に答える