首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串的实际长度。

字符串的实际长度。
EN

Stack Overflow用户
提问于 2018-05-24 10:25:09
回答 2查看 1.7K关注 0票数 1

我有一个string,它由汉字和可显示的ASCII代码混合而成。

代码语言:javascript
复制
string str = "Test測試123";

当我使用str.Lengthstr.ToCharArray()时,它都会将每个汉字都返回为1字符!这不是真的,因为任何汉字都是2字节

即使我尝试了Encoding.ASCII.GetBytes(str),它也给了我63中所有的汉字!结果与LengthToCharArray()的结果相同!

哪个是错误的结果对我来说!

有没有任何方法可以获得字符串的实际长度!?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-24 10:39:37

在Unicode世界里的长度总是很有趣..。你需要多长时间?例如:

代码语言:javascript
复制
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等于9len2等于18len3 (如果转换为UTF8,长度以字节为单位)等于13len4等于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。

票数 7
EN

Stack Overflow用户

发布于 2020-11-17 08:37:47

汉语的宽度空间是英语的两倍,而字符代码的长度则是另一个故事,UTF-8中文占三个字节,英语永远是一个字节。

代码语言:javascript
复制
//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 7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50506915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档