4

我需要获取实际的字符数(不是字节数),类似于在 V8 中获取字符串长度时的输出。

这对于使用 Twitter 是必要的,无论使用哪种语言,它都会按字符数计算,即使使用 UTF-8(它不按字节长度计算)。

前任:

在 chrome/chromium js 控制台或 nodejs 中:

> "Schöne Grüße".length
< 12

在 Qt 4.8.2 中,尝试QString someStr = "Schöne Grüße"; cout << someStr.length()将输出 15,这不是我的目标。

4

2 回答 2

4

如果你真的想计算字素簇(即用户感知的字符)而不是代码单元,你需要QTextBoundaryFinder. 这是一个使用示例:

#include <iostream>
#include <QTextBoundaryFinder>
#include <QString>

int main()
{
    const QString s=QString::fromUtf8(u8"abc\U00010139def\U00010102g");
    std::cout << "String: \"" << s.toStdString() << "\"\n";
    std::cout << "Code unit count       : " << s.length() << "\n";

    QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, s);
    int count=0;
    while(tbf.toNextBoundary()!=-1)
        ++count;
    std::cout << "Grapheme cluster count: " << count << "\n";
}

输出:

String: "abcdefg"
Code unit count       : 11
Grapheme cluster count: 9
于 2018-03-29T14:29:12.243 回答
2

我相信您需要使用特定的fromUtf8静态方法来构建它:

QString s = QString::fromUtf8("Schöne Grüße");
于 2012-12-22T01:34:19.787 回答