Unicode没有正确输出(Windows 10)

时间:2016-07-24 11:58:30

标签: c++ unicode windows-10 codeblocks

我是初学程序员,我正在开发一款简单的游戏。我想将 Alt + 2 1 9 █等Unicode符号输出到控制台。我在Windows 10上使用CodeBlocks,我正在使用GNU GCC编译器。 这就是我想要做的事情:

#include <iostream>

using namespace std;

int main()
{
    cout << "\u2588";
    return 0;
}

我在控制台上获得的是一些奇怪的符号。即使使用其他Unicode字符也会发生这种情况,但符号不同。

我尝试使用wcout,但后来我只得到一个空白区域。

我也尝试过这样的事情:

_setmode(_fileno(stdout), _O_U16TEXT);

但是后来我收到了_fileno_O_U16TEXT没有声明的错误,尽管我导入了似乎必要的库:

#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <fstream>

我的游戏并非完全需要Unicode符号,但我只是希望它看起来更好。

3 个答案:

答案 0 :(得分:0)

这是因为您尝试打印wchar_t(16位长)字符std::cout只支持char(8位长)。使用std::wcout代替std::coutwcout适用于宽字符。

答案 1 :(得分:0)

Windows命令提示符默认使用CP850作为编码,并且无法正确显示此符号或任何Unicode符号unless you change it

然而,它有自己的版本,\xDB可能就是你想要的。

对于您可以在Windows命令提示符中使用的其他符号,打开charmap.exe并检查字体Terminal,有一系列有用的符号应该与CP850兼容并显示在命令提示符下同样的方式也在那里。

答案 2 :(得分:0)

其他答案已经解决了将字符串视为UTF-16字面值的问题。您还可以告诉编译器将其视为utf-8文字(强制它将其中的所有字符编码为utf-8),方法是在其前面添加u8

#include <iostream>

using namespace std;

int main()
{
    cout << u8"\u2588";
    return 0;
}

请注意,默认情况下,Windows控制台不会将输出视为utf-8,因此如果没有其他一些设置,这仍然无法正确显示。