2016-04-14 5 views
5

Ich benutze Qt5. Ich habe einen QString, der ein Zeichen U "\ x1D4CC"() hält, das länger als 16 Bits ist. Obwohl dies nur ein Zeichen ist, gibt Qt zurück, dass die Größe dieser Zeichenfolge 2 ist. Gibt es eine Möglichkeit, anzuzeigen, wie viele echte Zeichen ein QString hat, unter der Annahme, dass es 32 Zeichen geben kann?Länge von UTF-32 Zeichen in Qt

Antwort

3

Unicode-Zeichen mit Code-Werten über 65535 werden unter Verwendung von Ersatzpaaren gespeichert, d.h. zwei aufeinanderfolgende QChars. QString::length geben Sie die Zahl QChar in dieser Zeichenfolge zurück, die sich von der Anzahl der Grapheme (echte Zeichen) unterscheiden kann.

Um die Anzahl der Grapheme zu berechnen, können Sie die Klasse QTextBoundaryFinder verwenden.

QString str = ""; 
QTextBoundaryFinder finder(QTextBoundaryFinder::Grapheme, str); 
int count = 0; 
while (finder.toNextBoundary() != -1) 
    ++count; 
qDebug() << count; 

Oder Sie können Ihre Zeichenfolge zu UCS-4/UTF-32-Darstellung und Berechnung der Anzahl der 32-Bit-Zeichen konvertieren.

QVector<uint> ucs4 = str.toUcs4(); 
qDebug() << ucs4.size(); 
Verwandte Themen