Qt中Utf-32字符的长度

时间:2016-04-14 12:22:32

标签: qt unicode qstring

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

1 个答案:

答案 0 :(得分:3)

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

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

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();