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 ではありませんか?
これは、「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 の一部ではなく、おそらくこれからもありません。)
char
UTF-8 でエンコードするのに 4 バイトを必要とする唯一の文字は、とにかく単一でエンコードできないことに注意してください。Achar
は UTF-16 コード単位であり、U+FFFF を超える Unicode コード ポイントは、それらを表すサロゲート ペアを形成する 2 つの UTF-16 コード単位を必要とします。
不公平だ。あなたが言及するページは言う
charキーワードは、Unicode文字を宣言するために使用されます
次に試してください:
Encoding.Unicode.GetByteCount(c)
その理由は、内部的に、.NET は文字を UTF-16 として表し、各文字は通常 2 バイトを占めるためです。一方、UTF-8 では、各文字が最初の 128 個のコードポイント (偶然にも ASCII と重複する) 内にある場合は 1 バイトを占め、それを超えると 2 バイト以上を占めます。