2016-04-14 15 views
5

私はQt5を使用しています。私は16ビットよりも長い1つの文字U "\ x1D4CC"()を保持するQStringを持っています。これは1文字だけですが、Qtはこの文字列のサイズが2であることを返します。QStringが32文字であることを前提としている実際の文字の数を表示する方法はありますか?QtのUtf-32文字の長さ

答えて

3

コード値が65535を超えるUnicode文字は、サロゲートペア、つまり2つの連続する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();