QString(0x1F64B)
QString::QString(QChar ch)
. 自
QChar
是16位类型,它将
截断
F64B
在角色中很容易
ï
如果放大或使用十六进制编辑器。由于0x1F64B无法装入单个16位QChar,并且必须由代理项对表示,因此不能以这种方式初始化字符串。
奥托
QString("ð")
因为它在构造字符串
从另一个字符串
. 您必须用这样的字符串来构造字符串,或者手动分配UTF-8/16代码单元。
不是。UTF-32是一种Unicode编码,使用32位作为代码单位。您只有QString而没有空字节数组,因此不需要关心它的底层编码(实际上是UTF-16)
我可以用什么包装这个值“1F64B”来生成QString(“”)?
QHash<qint32, QString> lookupCharacterDescription;
lookupCharacterDescription.insert(0x1F64B, "HAPPY PERSON RAISING ONE HAND");
然后使用
uint cp = 0x1F64B;
QString mystr = QString::fromUcs4(&cp, 1);
D83D DE4B
,或作为
F0 9F 99 8B
因此,在UTF-8中,您可以使用以下任何一种
QChar utf16[2] = { 0xD38D, 0xDE4B };
str1 = QString(utf16, 2);
char* utf8[4] = { 0xF0, 0x9F, 0x99, 0x8B };
str2 = QString::fromUtf8(utf8, 4);
如果您想在源代码中包含文本形式的字符串,那么以下两种方法都可以
str1 = QString::fromWCharArray(L"\xD83D\xDE4B");
str2 = QString::fromUtf8("\xF0\x9F\x99\x8B");
如果你有C++ 11的支持,那么只需使用前缀
u8
,
u
和
U
u8"ð"
u"ð"
U"ð"
u8"\U0001F64B"
u"\U0001F64B"
u"\uD83D\uDE4B"
U"\U0001F64B"
理解文本和编码的强制性条款:
There Ain't No Such Thing as Plain Text