QStringDecoder Class
QStringDecoder クラスは、テキストの状態ベースのデコーダを提供します。詳細...
Header: | #include <QStringDecoder> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QStringConverter |
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
QStringDecoder() | |
QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default) | |
QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default) | |
QChar * | appendToBuffer(QChar *out, QByteArrayView in) |
(since 6.6) char16_t * | appendToBuffer(char16_t *out, QByteArrayView in) |
QStringDecoder::EncodedData<QByteArrayView> | decode(QByteArrayView ba) |
QStringDecoder::EncodedData<const QByteArray &> | decode(const QByteArray &ba) |
qsizetype | requiredSpace(qsizetype inputLength) const |
QStringDecoder::EncodedData<QByteArrayView> | operator()(QByteArrayView ba) |
QStringDecoder::EncodedData<const QByteArray &> | operator()(const QByteArray &ba) |
静的パブリックメンバ
QStringDecoder | decoderForHtml(QByteArrayView data) |
詳細説明
テキストデコーダは、特定のエンコーディングを使用してエンコードされたテキストフォーマットを Qt の内部表現に変換します。
エンコードされたデータをQString に変換するには、以下のコードを使用します:
QByteArray encodedString = "..."; auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); QString string = toUtf16(encodedString);
デコーダは呼び出しの間に必要な状態を記憶しているので、例えばネットワーク経由で受信したデータをチャンク単位で変換することも、新しいデータが利用可能になるたびにデコーダを呼び出すだけで簡単にできます:
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); QString string; while (new_data_available()) { QByteArray chunk = get_new_data(); string += toUtf16(chunk); }
QStringDecoderオブジェクトはチャンク間の状態を維持するので、チャンクがマルチバイト文字列の途中で分割されても正しく動作します。
QStringDecoderオブジェクトは、その内部状態のためにコピーすることはできませんが、移動することはできます。
QStringConverter およびQStringEncoderも参照して ください。
メンバ関数ドキュメント
QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::decode(QByteArrayView ba)
QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::operator()(QByteArrayView ba)
QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::decode(const QByteArray &ba)
QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::operator()(const QByteArray &ba)
ba を変換し、QString に暗黙的に変換可能な構造体を返します。
QByteArray encodedString = "..."; auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); auto data = toUtf16(encodedString); // data's type is QStringDecoder::EncodedData<const QByteArray &> QString string = toUtf16(encodedString); // Implicit conversion to QString // Here you have to cast "data" to QString auto func = [&]() { return !toUtf16.hasError() ? QString(data) : u"foo"_s; }
[constexpr noexcept]
QStringDecoder::QStringDecoder()
デフォルトはデコーダを構築する。デフォルトのデコーダは無効で、テキストの変換には使えません。
[explicit]
QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
name とflags を使ってデコーダオブジェクトを作成します。name が既知のエンコーディングの名前でない場合、無効なコンバータが作成されます。
注意: Qt 6.8 より前のバージョンでは、この関数はconst char *
を受け取るだけでした。
isValid()も参照してください 。
[explicit constexpr]
QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
encoding とflags を使ってデコーダオブジェクトを作成します。
QChar *QStringDecoder::appendToBuffer(QChar *out, QByteArrayView in)
in で見たバイト列をデコードし、デコード結果をout から始まるバッファに書き込む。書き込まれたデータの終端へのポインタを返す。
out は、デコードされたデータをすべて保持できる大きさが必要である。 バイトのエンコード・データ・バッファをデコードするために必要な最大サイズを決定するには、 を使用する。in.size()
requiredSpace
requiredSpaceも参照のこと 。
[since 6.6]
char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)
これはオーバーロードされた関数です。
この関数は Qt 6.6 で導入されました。
[static]
QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)
HTML metaタグの先頭のバイトオーダーマークやcharset指定子を見て、data のHTMLのエンコーディングを決定しようとし、エンコーディングに一致するQStringDecoder を返します。返されたデコーダが有効でない場合、指定されたエンコーディングはQStringConverter でサポートされていません。エンコーディングが検出されなかった場合、このメソッドはUtf8のデコーダを返します。
isValid()も参照 。
qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const
inputLength エンコードされたデータを処理するために必要な UTF-16 コードユニットの最大量を返します。
appendToBufferも参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。