如何使用QString指定unicode字符?

问题描述 投票:0回答:5

如何使用QString通过代码(例如“4FF0”)指定unicode字符?我尝试了

QString s("\u4FF0");
但它只输出一个问号。知道如何做到这一点吗?

编辑:

确实如此,但是有更直接的方法吗?

std::wstring str = L"\u4FF07";
QString s = QString::fromStdWString(str));
qt unicode qstring
5个回答
32
投票

如果您直接指的是使用 Unicode 代码点值,那么

QChar
可能就是这样:

QString s = QChar(0x4FF0);

17
投票

显然 '\u' 只适用于 UTF-8:

QString s = QString::fromUtf8("\u4FF0");

// Or with that at the start of your main function:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
...
QString s("\u4FF0");

6
投票

从 C++11 开始,您可以使用 UTF-8 字符串文字前缀 (

u8
):

QString s(u8"\u4FF0");

0
投票

作为直接指针,尝试 QString(QChar(0x4FF0));

您需要确保您拥有正确的 utf-16 编码。


0
投票

QChars 限制为 16 位,因此不能表示 0xffff 以上的数字。来自 Qt 文档 (6.2):“QChar 类提供 16 位 Unicode 字符”。

尝试在 QChar 中存储更大的值将触发断言错误:ASSERT: "rc <= 0xffff".

但是 Unicode 需要更多空间。 Unicode 标准 15.1 已经定义了 149,641 个字符,对于 16 位来说太多了 (https://www.unicode.org/versions/stats/charcountv15_1.html)。因此 QChar 不能用于存储任意 Unicode 字符。

© www.soinside.com 2019 - 2024. All rights reserved.