我是初学程序员,我正在开发一款简单的游戏。我想将 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符号,但我只是希望它看起来更好。
答案 0 :(得分:0)
这是因为您尝试打印wchar_t
(16位长)字符std::cout
只支持char
(8位长)。使用std::wcout
代替std::cout
,wcout
适用于宽字符。
答案 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,因此如果没有其他一些设置,这仍然无法正确显示。