我有一个string,它由汉字和可显示的ASCII代码混合而成。
string str = "Test測試123";当我使用str.Length或str.ToCharArray()时,它都会将每个汉字都返回为1字符!这不是真的,因为任何汉字都是2字节!
即使我尝试了Encoding.ASCII.GetBytes(str),它也给了我63在中所有的汉字!结果与Length或ToCharArray()的结果相同!
哪个是错误的结果对我来说!
有没有任何方法可以获得字符串的实际长度!?
在我刚才给出的例子中: 11而不是9!?
发布于 2018-05-24 10:39:37
在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码单元,在UTF8中可映射到2或3个字节。
一些有趣的参考:What's the difference between a character, a code point, a glyph and a grapheme? 。
啊..。请忘了Encoding.ASCII吧。就像它不存在一样。可能不是你想的那样。即使你生活在旧的MS DOS世界里,有着有趣的角色,那也不是ASCII。
发布于 2020-11-17 08:37:47
汉语的宽度空间是英语的两倍,而字符代码的长度则是另一个故事,UTF-8中文占三个字节,英语永远是一个字节。
//only for UTF-8
string s = "計算字串的長度this is a test";
int sLength = s.Length; //length is 21
int byteCount = Encoding.UTF8.GetByteCount(s); // byte count is 35
int chineseCount = (byteCount - sLength)/2; //Chinese count is 7https://stackoverflow.com/questions/50506915
复制相似问题