C++ Visual Studio Unicode confusion

C++ Visual Studio Unicode confusion

本文关键字:confusion Unicode Studio Visual C++      更新时间:2023-10-16

我一直在看Unicode图表,知道前127个码位对于几乎所有编码方案都是等价的,ASCII(可能是原始的),UCS-2,ANSI,UTF-8,UTF-16,UTF-32和其他任何东西。

我写了一个循环来遍历从十进制 122 开始的字符,即小写的"z"。 之后还有几个字符,例如 {、|和 }。 之后,它进入了基本上是大约 20 个"控制字符"的无人区,然后字符再次从 161 开始,带有一个倒置的感叹号,162 是带有笔画的美分符号,依此类推。

问题是,我的结果与Unicode图表,UTF-8或UCS-2图表不符,符号似乎是随机的。 顺便说一下,我将"字符变量"设置为四字节整数的原因是,当我使用"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 图表

http://unicode-table.com/en/#control-character

您打印的字节很可能是使用控制台代码页(有时称为 OEM)显示的,该代码页可能与 Windows 应用程序使用的本地单字节或双字节字符集(称为 ANSI)不同。

例如,在我的英语Windows上,安装ANSI意味着windows-1252,而控制台默认使用代码页850。

有几种方法可以将任意 Unicode 字符写入控制台,请参阅如何在 Windows 控制台上输出 Unicode 字符串