Unicode字符显示为十进制数字而不是符号,我该如何解决?

时间:2019-06-24 20:41:08

标签: c++

我想编写一个小程序,该程序能够使用wchar_t显示ASCII或LATIN_1中未包含的unicode字符。

我正在使用C ++ 14,并且已将文本编辑器配置为根据UTF-8标准存储字符。我尝试同时使用char16_t和char32_t,但结果保持不变。


在main()内部

wchar_t spade = L'\u2660';
wchar_t heart = L'\u2665';
wchar_t diamond = L'\u2666';
wchar_t clover = L'\u2663';

cout << spade << endl;
cout << heart << endl;
cout << diamond << endl;
cout << clover << endl;

上面的代码输出的是十进制值9824 9829 9830 9827,而不是Unicode字符符号。

2 个答案:

答案 0 :(得分:2)

您需要使用std :: wcout打印Unicode字符

答案 1 :(得分:1)

std::cout没有operator<<的任何重载,这些重载接受wchar_tchar16_tchar32_t作为输入。因此,编译器会将这些值提升为int,这就是为什么您看到输出数字值的原因。

输出std::wcout数据时,您需要使用std::cout代替wchar_t

或者,如果您的控制台支持UTF-8,则可以将std::cout与UTF-8字符串一起使用,而不是宽(UTF-16 / 32)字符串。

const char *spade = u8"♠";
const char *heart = u8"♥";
const char *diamond = u8"♦";
const char *clover = u8"♣";

cout << spade << endl;
cout << heart << endl;
cout << diamond << endl;
cout << clover << endl;