X.ToCharArray (). Длина РАВЕНСТВА GetBytes (X). Длина - PullRequest
1 голос
/ 31 марта 2011
string s = "test";
int charCount = s.ToCharArray().Length;
int byteCount = System.Text.Encoding.Default.GetBytes(s).Length;

Когда может произойти (charCount! = ByteCount)?Я полагаю, что в случае символов Юникода, но не в общем случае.

.NET поддерживает символы Юникода, но является ли это кодировка по умолчанию (System.Text.Encoding.Default) для .NET?«System.Text.Encoding.Default» показывает «System.Text.SBCSCodePageEncoding» в качестве однобайтовой кодировки.

Ответы [ 2 ]

5 голосов
/ 31 марта 2011

Кодировка по умолчанию - UTF8, которая может содержать 1-4 байта пробела на символ.

charCount и byteCount не будут равны, если какой-либо символ в строке s использует более 1 байта.

Чтобы принудительно использовать 4 байта, вы можете проверить, используя кодировку Unicode, тогда byteCount будет = 8.

int byteCount = System.Text.Encoding.Unicode.GetBytes(s).Length;
1 голос
/ 31 марта 2011

Количество символов будет отличаться от количества байтов всякий раз, когда вы используете кодировку, которая использует более одного байта на символ. Это относится к нескольким кодировкам, включая UTF-16 (внутреннее представление строк .NET) и UTF-32.

...