C# 字符串的实际长度

C# 字符串的实际长度,c#,string,size,ascii,C#,String,Size,Ascii,我有一个字符串,它由汉字和可显示的ASCII码组成 string str = "Test測試123"; 当我使用str.Length或str.tocharray时,它都会将每个汉字作为1个字符返回!这是不正确的,因为任何汉字都是2字节 即使我尝试Encoding.ASCII.GetBytesstr,它也只会给我63个汉字!!!结果证明,这和长度或ToCharArray的结果是一样的 这对我来说是错误的结果 有没有办法得到字符串的实际长度 在我刚刚给出的例子中:11而不是9 Unicode世界中

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

string str = "Test測試123";
当我使用str.Length或str.tocharray时,它都会将每个汉字作为1个字符返回!这是不正确的,因为任何汉字都是2字节

即使我尝试Encoding.ASCII.GetBytesstr,它也只会给我63个汉字!!!结果证明,这和长度或ToCharArray的结果是一样的

这对我来说是错误的结果

有没有办法得到字符串的实际长度


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

Unicode世界中的长度总是很有趣。。。你需要多长?例如:

string str = "Space of Chinese's width is double as English, but character code's length is another story, UTF-8 Chinese take three bytes and English is always one byte.

//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

字符串str=长度在Unicode世界中总是很有趣的。。。你需要多长?例如:

string str = "Space of Chinese's width is double as English, but character code's length is another story, UTF-8 Chinese take three bytes and English is always one byte.

//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

string str=中文的空格宽度是英文的两倍,但字符代码的长度是另一回事,UTF-8中文需要三个字节,英文总是一个字节


中文的空格宽度是英文的两倍,但字符代码的长度是另一回事,UTF-8中文需要三个字节,英文总是一个字节


由2个ASCII码组成,编号为。。。如果转换为UTF8,那么汉字是两个字节。。。非常不同的东西。尝试编码.UTF8.getByteCounts这就是我的意思!更新@博梅尔丁:对不起,我真的不明白你的意思!NET中的字符串默认为UTF16。因此,以字节为单位的字符串大小将不同于其长度和字符数。你需要哪一个?我试过Encoding.UTF8.GetByteCountstr,但它给了我一个比实际大小更大的尺寸!!!在我给出的例子中:13而不是11!那额外的2个是从哪里来的!?!?!?由2个ASCII码组成,编号为。。。如果转换为UTF8,那么汉字是两个字节。。。非常不同的东西。尝试编码.UTF8.getByteCounts这就是我的意思!更新@博梅尔丁:对不起,我真的不明白你的意思!NET中的字符串默认为UTF16。因此,以字节为单位的字符串大小将不同于其长度和字符数。你需要哪一个?我试过Encoding.UTF8.GetByteCountstr,但它给了我一个比实际大小更大的尺寸!!!在我给出的例子中:13而不是11!那额外的2个是从哪里来的!?!?!?谢谢你的回答!这就是我的想法!这都是关于编码的!在我的情况下,它是大5!因此,如果我使用Encoding.GetEncodingBIG5.GetByteCountstr,它将给出我正在寻找的答案!非常感谢大家!!!像不存在一样生活:是的!某些标准要求使用ASCII码。如果这样一个标准没有被引用,它几乎肯定不是ASCII。@TomBlodget,正如你所写的:-谢谢你的回答!这就是我的想法!这都是关于编码的!在我的情况下,它是大5!因此,如果我使用Encoding.GetEncodingBIG5.GetByteCountstr,它将给出我正在寻找的答案!非常感谢大家!!!像不存在一样生活:是的!某些标准要求使用ASCII码。如果没有引用这样的标准,几乎可以肯定它不是ASCII。@TomBlodget,正如您所写:-