我有点害怕问这个,因为我确定以前有人问过,但我找不到。它可能很明显,但我以前从未研究过编码。
int Convert(char c)
{
return (int)c;
}
该方法产生什么编码?我认为它可能是 ASCII(至少对于 <128),但是执行下面的代码会产生......笑脸作为第一个字符?什么?绝对不是ASCII...
for (int i = 0; i < 128; i++)
Console.WriteLine(i + ": " + (char)i);
我有点害怕问这个,因为我确定以前有人问过,但我找不到。它可能很明显,但我以前从未研究过编码。
int Convert(char c)
{
return (int)c;
}
该方法产生什么编码?我认为它可能是 ASCII(至少对于 <128),但是执行下面的代码会产生......笑脸作为第一个字符?什么?绝对不是ASCII...
for (int i = 0; i < 128; i++)
Console.WriteLine(i + ": " + (char)i);
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 范围内的不可打印字符。
每个字符都是一个 UTF-16 代码点。但是,您应该使用正确的 Encoding 类来确保对 unicode 进行规范化。请参阅 C# 和 UTF-16 字符