3

可能重复:
char 对象对应于哪个字符编码(Unicode 版本)集?

我有点害怕问这个,因为我确定以前有人问过,但我找不到。它可能很明显,但我以前从未研究过编码。

int Convert(char c)
{
    return (int)c;
}

该方法产生什么编码?我认为它可能是 ASCII(至少对于 <128),但是执行下面的代码会产生......笑脸作为第一个字符?什么?绝对不是ASCII...

for (int i = 0; i < 128; i++)
    Console.WriteLine(i + ": " + (char)i);
4

2 回答 2

5

C#char使用 UTF-16 编码。语言规范1.3 Types and variables说:

C# 中的字符和字符串处理使用 Unicode 编码。char 类型代表一个 UTF-16 代码单元,而 string 类型代表一个 UTF-16 代码单元序列。

UTF-16 与 ASCII 重叠,因为 ASCII 范围 0-127 中的字符代码在 UTF-16 中与 ASCII 中的含义相同。程序输出中的笑脸大概是您的控制台如何解释 0-31 范围内的不可打印字符。

于 2012-05-13T15:30:08.913 回答
0

每个字符都是一个 UTF-16 代码点。但是,您应该使用正确的 Encoding 类来确保对 unicode 进行规范化。请参阅 C# 和 UTF-16 字符

于 2012-05-13T15:30:19.943 回答