char的大小为:2(msdn)
sizeof(char) //2
测试:
char[] c = new char[1] {'a'};
Encoding.UTF8.GetByteCount(c) //1 ?
为什么值为1?
(当然,如果c是像'ש'那样的unicode字符,那么它确实显示2应该。)
a
不是.net char?
答案 0 :(得分:14)
这是因为'a'只需要一个字节来编码UTF-8。
Encoding.UTF8.GetByteCount(c)
将告诉您在UTF-8中对给定的字符数组进行编码需要多少字节。有关详细信息,请参阅Encoding.GetByteCount
的文档。这与.NET内部char
类型的宽度完全不同。
每个代码点小于128的字符(即U + 0000到U + 007F)都需要一个字节来编码为UTF-8。
其他字符在UTF-8中占用2,3或甚至4个字节。 (有超过U + 1FFFF的值,将需要5或6个字节进行编码,但它们目前不属于Unicode,可能永远不会。)
请注意,在UTF-8中编码4个字节的唯一字符无论如何都不能在单个char
中编码。 char
是UTF-16代码单元,U + FFFF上的任何Unicode代码点都需要两个UTF-16代码单元组成代理对来代表它们。
答案 1 :(得分:4)
原因是,在内部,.NET将字符表示为UTF-16,其中每个字符通常占用2个字节。另一方面,在UTF-8中,每个字符占用1个字节,如果它在前128个代码点(偶然与ASCII重叠)中,并且超过2个或更多字节。
答案 2 :(得分:4)
这不公平。你提到的页面说
char关键字用于声明Unicode字符
然后尝试:
Encoding.Unicode.GetByteCount(c)