获取QString长度(以字符为单位,而不是字节)

Get QString length (in characters, not bytes)

本文关键字:字节 为单位 长度 QString 字符 获取      更新时间:2023-10-16

我需要得到实际的字符计数(不是字节计数),类似于在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,这不是我的目标。

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

#include <iostream>
#include <QTextBoundaryFinder>
#include <QString>
int main()
{
    const QString s=QString::fromUtf8(u8"abcU00010139defU00010102g");
    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: "abc  def  g"
Code unit count       : 11
Grapheme cluster count: 9

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

QString s = QString::fromUtf8("Schöne Grüße");