C ++ Visual Studio Unicode混淆

时间:2016-01-18 20:27:53

标签: c++ unicode encoding character

我一直在查看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图表

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

1 个答案:

答案 0 :(得分:1)

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

例如,在我的英语语言中,Windows安装ANSI表示windows-1252,而默认情况下,控制台使用code page 850

有几种方法可以将任意Unicode字符写入控制台,请参阅How to Output Unicode Strings on the Windows Console