Длина в мире Unicode - это всегда весело ... Какая длина вам нужна?Например:
string str = "?";
// Length in UTF-16 code units
int len = str.Length; // 2
// Length in bytes, if encoded in UTF16, as done by .NET
int len2 = str.Length * 2; // 4
// Length in bytes, if encoded in UTF8
int len3 = Encoding.UTF8.GetByteCount(str); // 4
// Length in unicode code points
int len4 = Encoding.UTF32.GetByteCount(str) / 4; // 1
Обратите внимание, что существует пятая длина: длина в кластере графем, которая еще более сложна для вычисления, поскольку некоторые кодовые точки могут «сливаться» вместе, а шестая: длина вколичество символов.
Теперь ваша строка имеет len
, равную 9
, len2
, равную 18
, len3
(поэтому длина в байтах, если преобразована в UTF8) равна 13
, len4
равно 9.
Почти все китайские иероглифы находятся в базовой многоязычной плоскости стандарта Unicode, поэтому они имеют длину 1 единицы кода UTF-16 и могут отображаться на2 или 3 байта в UTF8.
Несколько интересных ссылок: В чем разница между символом, кодовой точкой, глифом и графемой?.
Ах ... и, пожалуйста, забудьте о Encoding.ASCII
.Живи так, как будто его не существует.Это, вероятно, не то, что вы думаете.Даже если вы жили в старом мире MS DOS с его забавными персонажами, это не был ASCII.