【发布时间】:2016-04-14 12:22:32
【问题描述】:
我正在使用 Qt5。我有一个 QString 包含一个字符 U"\x1D4CC" (????),它长于 16 位。即使这只是一个字符,Qt 也会返回这个字符串的大小为 2。有没有办法显示一个 QString 有多少个真实字符,假设可以有 32 个字符?
【问题讨论】:
我正在使用 Qt5。我有一个 QString 包含一个字符 U"\x1D4CC" (????),它长于 16 位。即使这只是一个字符,Qt 也会返回这个字符串的大小为 2。有没有办法显示一个 QString 有多少个真实字符,假设可以有 32 个字符?
【问题讨论】:
代码值高于 65535 的 Unicode 字符使用代理对存储,即两个连续的QChars。 QString::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();
【讨论】: