我想编写一个小程序,该程序能够使用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字符符号。
答案 0 :(得分:2)
您需要使用std :: wcout打印Unicode字符
答案 1 :(得分:1)
std::cout
没有operator<<
的任何重载,这些重载接受wchar_t
,char16_t
或char32_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;