gpt4 book ai didi

c# - 字符串的实际长度

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:55 24 4
gpt4 key购买 nike

我有一个字符串,它由汉字和可显示的ASCII码混合组成。

string str = "Test測試123";

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

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

就我的目的而言,哪个是错误的结果!!!

有什么方法可以获取字符串的实际长度!?

在我刚刚给出的例子中: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

请注意,还有第五个长度:字素簇数量的长度,计算起来更加复杂,因为一些代码点可以“合并”在一起,还有第六个长度:字形数量的长度。

现在,您的字符串的 len 等于 9len2 等于 18len3 (如果转换为 UTF8,则以字节为单位的长度)等于 13len4 等于 9。

几乎所有的汉字都在Unicode标准的Basic Multilingual Plane中,所以它们的长度为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。

关于c# - 字符串的实际长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com