玩纸牌用C ++进行Unicode打印

时间:2018-06-12 09:35:18

标签: c++ unicode printf

根据this wiki link,游戏卡具有形式为U + 1f0a1的Unicode。 我想用c ++创建一个数组来处理52个标准的扑克牌,但我注意到这个Unicode的长度超过了2个字节。

所以下面我的简单示例不起作用,如何存储长度超过2个字节的Unicode字符?

wchar_t t = '\u1f0a1';
printf("%lc",t);

上述代码会将t截断为\u1f0a

2 个答案:

答案 0 :(得分:0)

在Windows上wchar_t存储一个UTF-16代码单元,你必须将你的字符串存储为UTF-16(使用带有prefix的字符串文字)这对你没有帮助,因为windows控制台可以仅输出最大为0xFFFF的字符。见:

How to use unicode characters in Windows command line?

答案 1 :(得分:0)

  

如何存储更长的2字节unicode字符?

您可以使用前缀为char32_t的{​​{1}},但无法将其打印到控制台。此外,您根本不需要U,utf-16足以编码该字符。 char32_t,您需要前缀wchar_t t = L'\u2660'来指定它是一个宽字符。

如果您使用Windows与Visual C ++编译器,我建议采用一种方式:

  1. 使用utf-8编码保存源文件
  2. 设置编译参数L,参考here
  3. 使用控制台支持utf-8编码,如 Git Bash ,以查看结果。
  4. enter image description here