Qt中Utf-32字符的长度

use*_*713 5 unicode qstring qt

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

Mee*_*fte 6

代码值大于 65535 的 Unicode 字符使用代理对存储,即两个连续的QChars. QString::length返回该字符串中 的数量QChar,该数量可能与字素(真实字符)的数量不同。

要计算字素的数量,您可以使用QTextBoundaryFinder类。

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

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

QVector<uint> ucs4 = str.toUcs4();
qDebug() << ucs4.size();
Run Code Online (Sandbox Code Playgroud)