字符串的实际长度

Pik*_*620 1 c# string size ascii

我有一个string由汉字和可显示的ASCII码混合而成的.

string str = "Test??123";
Run Code Online (Sandbox Code Playgroud)

当我使用str.Length或者str.ToCharArray(),它们都将每个汉字作为1个字符返回!这不是真的,因为任何中文字符都是2字节!

即使我尝试Encoding.ASCII.GetBytes(str),它只给我63英寸的所有汉字!结果与结果相同Length或者ToCharArray()!

哪个是我的目的错误的结果!

有没有办法得到一个字符串的实际长度!?

在我给出的例子中:11而不是9!?

xan*_*tos 7

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
Run Code Online (Sandbox Code Playgroud)

请注意,存在第五个长度:字形簇数量的长度,计算起来更复杂,因为一些代码点可以"合并"在一起,第六个长度:字形数量的长度.

现在,您的串具有len等于9,len2等于18,len3(因此在字节,如果转换为UTF8的长度)等于13,len4等于9.

几乎所有的汉字都在Unicode标准的基本多语言平面中,因此它们的长度为1 UTF-16代码单元,并且它们可以在UTF8中映射到2或3个字节.

一些有趣的参考:角色,代码点,字形和字形之间有什么区别? .

啊......请忘了Encoding.ASCII.生活就像它不存在.它可能不是你认为的那样.即使你生活在旧的MS DOS世界中,它的有趣字符也不是ASCII.

  • 感谢您的回答!哪个给了我这个主意!这都是关于编码的!就我而言,它是BIG5!所以,如果我使用**`Encoding.GetEncoding("BIG5").GetByteCount(str)`**,它会给我一个我正在寻找的答案!非常非常感谢你!!! (2认同)