Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的扑克牌Unicode打印+;_C++_Unicode_Printf - Fatal编程技术网

C++ C+中的扑克牌Unicode打印+;

C++ C+中的扑克牌Unicode打印+;,c++,unicode,printf,C++,Unicode,Printf,根据,扑克牌的Unicode格式为U+1f0a1。 我想在C++中创建一个数组来腐蚀52个标准扑克牌,但是我注意到这个Unicode长2字节。 所以我下面的简单示例不起作用,如何存储长度超过2字节的Unicode字符 wchar_t t = '\u1f0a1'; printf("%lc",t); 上面的代码将t截断为\u1f0a在Windows wchar\u存储UTF-16代码单元时,您必须将字符串存储为UTF-16(使用字符串文字),这对您也没有帮助,因为Windows控制台最多只能输出0

根据,扑克牌的Unicode格式为U+1f0a1。 我想在C++中创建一个数组来腐蚀52个标准扑克牌,但是我注意到这个Unicode长2字节。 所以我下面的简单示例不起作用,如何存储长度超过2字节的Unicode字符

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

上面的代码将
t
截断为
\u1f0a

在Windows wchar\u存储UTF-16代码单元时,您必须将字符串存储为UTF-16(使用字符串文字),这对您也没有帮助,因为Windows控制台最多只能输出0xFFFF字符。见此:

如何存储长度超过2字节的unicode字符

您可以使用前缀为
U
char32\U t
,但无法将其打印到控制台。此外,您根本不需要
char32\u t
,utf-16足以对该字符进行编码
wchar\u t=L'\u2660'
,您需要前缀
L
来指定它是宽字符


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

  • 使用utf-8编码保存源文件
  • 设置编译参数
    /utf-8
    ,参考
  • 使用支持utf-8编码的控制台(如Git Bash)查看结果

  • 要打印宽字符串,请使用这是问题的一部分。。。由于wchar只存储2个字节,我正在处理更长的unicode字符。对于长度超过2个字节的字符,您可以使用
    char32\u t
    ,但在控制台中打印此类字符似乎很困难()@Siddharthabra使用
    std::wstring
    ,而不是
    wchar\u t
    。在
    wchar\u t
    为2字节的平台(Windows)上,使用UTF-16编码
    std::wstring
    ,例如:
    std::wstring t=L“\uD83C\uDCA1”这大部分是错误的。有一种方法可以在控制台中输出UTF-16,git bash与任何事情都无关,主要是,♠ != @n、 m.好的,现在我将其更改为“推荐方式”。:D“使用git bash”几乎不是推荐的方法,因为它需要安装第三方软件。各种控制台替换可以处理各种Unicode字符(我使用的是ConEmu,它显示有问题的字符没有任何问题)。