Unicode 无法正确输出 (Windows 10)
Unicode doesn't output correctly (Windows 10)
我是一名初级程序员,正在开发一款简单的游戏。我想输出像 Alt+219[=33 这样的 Unicode 符号=] █ 到控制台。我在 Windows 10 上使用 CodeBlocks,我正在使用 GNU GCC 编译器。
这是我正在尝试做的事情:
#include <iostream>
using namespace std;
int main()
{
cout << "\u2588";
return 0;
}
我在控制台上得到的是一些奇怪的符号。即使使用其他 Unicode 字符也会发生这种情况,但符号不同。
我尝试使用 wcout
,但我得到的只是一个空白 space。
我也试过这样的事情:
_setmode(_fileno(stdout), _O_U16TEXT);
但是我得到了 _fileno
和 _O_U16TEXT
未声明的错误,尽管我导入了似乎为此所必需的库:
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <fstream>
我的游戏并不完全需要 Unicode 符号,但我只是想让它看起来更漂亮。
那是因为您正在尝试使用仅支持 char
(8 位长)的 std::cout
打印 wchar_t
(16 位长)字符。使用 std::wcout
而不是 std::cout
,wcout
用于宽字符。
Windows 命令提示符默认使用 CP850 作为编码,因此无法正确显示此符号或任何 Unicode 符号 unless you change it。
但是,它有自己的版本,\xDB
这可能就是您要找的。
对于您可以在 Windows 命令提示符中使用的其他符号,打开 charmap.exe
并检查字体 Terminal
,有一系列有用的符号应该与 CP850 兼容,并且在命令提示符下的显示方式与它们在命令提示符下的显示方式相同。
其他答案已经解决了将字符串视为 UTF-16 文字的问题。您还可以告诉编译器将其视为 utf-8 文字(强制它将其中的所有字符编码为 utf-8),方法是在其前面加上前缀 u8
:
#include <iostream>
using namespace std;
int main()
{
cout << u8"\u2588";
return 0;
}
请注意,windows 控制台在默认情况下并未设置为将输出视为 utf-8,因此如果没有一些额外的设置,它仍然无法正确显示。
我是一名初级程序员,正在开发一款简单的游戏。我想输出像 Alt+219[=33 这样的 Unicode 符号=] █ 到控制台。我在 Windows 10 上使用 CodeBlocks,我正在使用 GNU GCC 编译器。 这是我正在尝试做的事情:
#include <iostream>
using namespace std;
int main()
{
cout << "\u2588";
return 0;
}
我在控制台上得到的是一些奇怪的符号。即使使用其他 Unicode 字符也会发生这种情况,但符号不同。
我尝试使用 wcout
,但我得到的只是一个空白 space。
我也试过这样的事情:
_setmode(_fileno(stdout), _O_U16TEXT);
但是我得到了 _fileno
和 _O_U16TEXT
未声明的错误,尽管我导入了似乎为此所必需的库:
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <fstream>
我的游戏并不完全需要 Unicode 符号,但我只是想让它看起来更漂亮。
那是因为您正在尝试使用仅支持 char
(8 位长)的 std::cout
打印 wchar_t
(16 位长)字符。使用 std::wcout
而不是 std::cout
,wcout
用于宽字符。
Windows 命令提示符默认使用 CP850 作为编码,因此无法正确显示此符号或任何 Unicode 符号 unless you change it。
但是,它有自己的版本,\xDB
这可能就是您要找的。
对于您可以在 Windows 命令提示符中使用的其他符号,打开 charmap.exe
并检查字体 Terminal
,有一系列有用的符号应该与 CP850 兼容,并且在命令提示符下的显示方式与它们在命令提示符下的显示方式相同。
其他答案已经解决了将字符串视为 UTF-16 文字的问题。您还可以告诉编译器将其视为 utf-8 文字(强制它将其中的所有字符编码为 utf-8),方法是在其前面加上前缀 u8
:
#include <iostream>
using namespace std;
int main()
{
cout << u8"\u2588";
return 0;
}
请注意,windows 控制台在默认情况下并未设置为将输出视为 utf-8,因此如果没有一些额外的设置,它仍然无法正确显示。