我一直在查看Unicode图表,并且知道前127个代码点对于几乎所有编码方案都是等效的,ASCII(可能是原始的),UCS-2,ANSI,UTF-8,UTF- 16,UTF-32等等。
我写了一个循环来遍历从小数122开始的字符,这是小写" z"。之后还有一些字符,如{,|和}。在此之后,它进入了无人区域,基本上大约是20"控制角色"然后角色再次在161处开始,带有倒置的感叹号,162这是带有分号的分号通过它,等等。
问题是,我的结果与Unicode图表,UTF-8或UCS-2图表不对应,符号似乎是随机的。顺便说一句,我将"字符变量设为四字节int的原因是当我使用" char" (它本质上是一个单字节签名数据类型,在127之后循环回到-128,我认为这可能会弄乱它。
我知道我做错了什么,有人能弄清楚发生了什么吗?无论我是在项目设置中将字符集设置为Unicode还是多字节字符,都会发生这种情况。这是您可以运行的代码。
#include <iostream>
using namespace std;
int main()
{
unsigned int character = 122; // Starting at "z"
for (int i = 0; i < 100; i++)
{
cout << (char)character << endl;
cout << "decimal code point = " << (int)character << endl;
cout << "size of character = " << sizeof(character) << endl;
character++;
system("pause");
cout << endl;
}
return 0;
}
顺便说一句,这是Unicode图表
答案 0 :(得分:1)
您正在打印的 bytes 很可能是使用控制台代码页(有时称为OEM)显示的,这可能与使用的本地单字节或双字节字符集不同。 Windows应用程序(称为ANSI)。
例如,在我的英语语言中,Windows安装ANSI表示windows-1252,而默认情况下,控制台使用code page 850。
有几种方法可以将任意Unicode字符写入控制台,请参阅How to Output Unicode Strings on the Windows Console