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