Получить длину QString (в символах, а не в байтах)

Мне нужно получить фактическое количество символов (не число байтов), подобное тому, что выводится при получении длины строки в 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, что не то, к чему я стремлюсь.

1

Решение

Я считаю, что вам нужно построить его, используя конкретные fromUtf8 статический метод:

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

Другие решения

Если вы действительно хотите считать графемные кластеры (то есть воспринимаемые пользователем символы) вместо единиц кода, вам нужно 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: "abc��def��g"Code unit count       : 11
Grapheme cluster count: 9
1

По вопросам рекламы [email protected]