【发布时间】:2015-01-14 13:04:21
【问题描述】:
这段代码:
string a = "abc";
string b = "A????C";
Console.WriteLine("Length a = {0}", a.Length);
Console.WriteLine("Length b = {0}", b.Length);
输出:
Length a = 3
Length b = 4
为什么?我唯一能想到的就是汉字有2个字节长,.Length方法返回字节数。
【问题讨论】:
-
只看标题我怎么知道这是代理对问题。啊,好'ol System.Globalization 是你的盟友!
-
在 UTF-16 中是 4 个字节长,而不是 2 个
-
char
????的十进制值为 131603,因为 chars 是无符号字节,这意味着您可以用 2 个字符而不是 4 个字符来实现该值(无符号 16 位值最大值为 65535(或65536 个变体)并使用 2 个字符来表示它允许的最大变体数量不是 65536*2(131072),而是 65536*65536 个变体(4,294,967,296,实际上是 32 位值) -
@GMAsucci: UTF-16 是 2 个字符,但是 4 个字节,因为一个 UTF16 字符是 2 个字节,否则它无法存储 65536 个变体,而只能存储 256 个。
-
我推荐阅读伟大的文章“每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!)”joelonsoftware.com/articles/Unicode.html
标签: c# .net string unicode unicode-string