Unicode 无法正确输出 (Windows 10)

Unicode doesn't output correctly (Windows 10)

本文关键字:Windows 输出 Unicode      更新时间:2023-10-16

我是一名初级程序员,正在开发一款简单的游戏。我想输出Unicode符号,如Alt+219

#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符号对我的游戏来说并不是完全必要的,但我只想让它看起来更好。

Windows命令提示符默认使用CP850作为编码,除非您更改它,否则将无法正确显示此符号或任何Unicode符号。

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

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

这是因为您正尝试使用仅支持char(8位长)的std::cout打印wchar_t(16位长)字符。使用std::wcout而不是std::coutwcout用于宽字符。

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

#include <iostream>
using namespace std;
int main()
{
    cout << u8"u2588";
    return 0;
}

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