Qt中UTF-32字符的长度

Length of Utf-32 character in Qt

我正在使用 Qt5。我有一个 QString,其中包含一个长度超过 16 位的字符 U"\x1D4CC" ()。即使这只是一个字符,Qt returns 这个字符串的大小是 2。有没有办法显示一个 QString 有多少个真实字符假设可以有 32 个字符?

代码值大于 65535 的 Unicode 字符使用代理对存储,即两个连续的 QCharsQString::length return 该字符串中 QChar 的个数,可能与字素(实际字符)的个数不同。

要计算字素数,您可以使用QTextBoundaryFinder class。

QString str = "";
QTextBoundaryFinder finder(QTextBoundaryFinder::Grapheme, str);
int count = 0;
while (finder.toNextBoundary() != -1)
    ++count;
qDebug() << count;

或者您可以将字符串转换为 UCS-4/UTF-32 表示并计算 32 位字符的数量。

QVector<uint> ucs4 = str.toUcs4();
qDebug() << ucs4.size();