【发布时间】:2018-06-12 09:35:18
【问题描述】:
根据this wiki link,扑克牌有 U+1f0a1 形式的 Unicode。 我想在 C++ 中创建一个数组来处理 52 张标准扑克牌,但我注意到这个 Unicode 比 2 个字节长。
所以我下面的简单示例不起作用,如何存储长度超过 2 个字节的 Unicode 字符?
wchar_t t = '\u1f0a1';
printf("%lc",t);
以上代码将t截断为\u1f0a
【问题讨论】:
根据this wiki link,扑克牌有 U+1f0a1 形式的 Unicode。 我想在 C++ 中创建一个数组来处理 52 张标准扑克牌,但我注意到这个 Unicode 比 2 个字节长。
所以我下面的简单示例不起作用,如何存储长度超过 2 个字节的 Unicode 字符?
wchar_t t = '\u1f0a1';
printf("%lc",t);
以上代码将t截断为\u1f0a
【问题讨论】:
如何存储更长的 2 字节 unicode 字符?
您可以使用带有前缀U 的char32_t,但无法将其打印到控制台。此外,您根本不需要char32_t,utf-16 足以编码该字符。 wchar_t t = L'\u2660',您需要前缀 L 来指定它是一个宽字符。
如果你使用的是带有Visual C++编译器的Windows,我推荐一种方式:
/utf-8,引用here。【讨论】:
在 Windows wchar_t 存储一个 UTF-16 代码单元,您必须将您的字符串存储为 UTF-16(使用带有prefix 的字符串文字)这对您也没有帮助,因为 Windows 控制台只能输出最多 0xFFFF 的字符。看到这个:
【讨论】: