.net中的字符大小不符合预期?

Roy*_*mir 4 .net c# .net-4.0 char

char的大小是:2(msdn)

sizeof(char)  //2
Run Code Online (Sandbox Code Playgroud)

一个测试 :

char[] c = new char[1] {'a'};

Encoding.UTF8.GetByteCount(c) //1 ?
Run Code Online (Sandbox Code Playgroud)

为什么价值是1?

(当然,如果c是像'ש'那样的unicode char,那么它确实显示2应该.)

a 是不是.net char?

Jon*_*eet 14

这是因为'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的一部分的时刻,而且可能永远不会.)

请注意,用UTF-8编码的4个字节的唯一字符char无论如何都不能编码.A char是UTF-16代码单元,U + FFFF上的任何Unicode代码点都需要两个UTF-16代码单元来形成一个代理对来代表它们.