QtのU+FFFFを超えるUnicode文字
QChar
それ自体は、までのUnicode文字のみをサポートしますU+FFFF
。
QString
2つのQCharU+FFFF
を連結する(つまり、UTF-16エンコーディングを使用する)ことにより、Unicode文字をサポートします。ただし、を超える文字を処理する必要がある場合、QStringAPIはあまり役に立ちません。例として、単一のUnicode文字を含むQStringインスタンスは、1ではなく2のサイズを返します。U+FFFF
U+131F6
私は2011年にこの問題についてQTBUG-18868を開きましたが、3年以上(!)の議論の末、解決策なしに「範囲外」として最終的に閉じられました。
解決
ただし、 Qtバグレポートに添付されているこれらのUnicodeQt文字列ラッパークラスをダウンロードして使用することはできます。LGPLの下でライセンスされています。
このダウンロードには、ラッパークラス、、が含まれていますQUtfString
。これらのクラスはQUtfChar
、既存のQtクラスQUtfRegExp
をQUtfStringList
補完し、次のようなことを可能にします。
QUtfString str;
str.append(0x1307C); // Some Unicode character beyond U+FFFF
Q_ASSERT(str.size() == 1);
Q_ASSERT(str[0] == 0x1307C);
str += 'a';
Q_ASSERT(str.size() == 2);
Q_ASSERT(str[1] == 'a');
Q_ASSERT(str.indexOf('a') == 1);
実装、使用法、および実行時の複雑さの詳細については、ダウンロードに含まれているAPIドキュメントを参照してください。