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!?
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.