このページでは

QStringDecoder Class

QStringDecoder クラスは、テキストの状態ベースのデコーダを提供します。詳細...

ヘッダー #include <QStringDecoder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承: 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)
(since 6.11) QStringDecoder::FinalizeResult finalize()
(since 6.11) QStringDecoder::FinalizeResultQChar finalize(QChar *out, qsizetype maxlen)
(since 6.11) QStringDecoder::FinalizeResult finalize(char16_t *out, qsizetype maxlen)
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() && !toUtf16.hasError()) {
    QByteArray chunk = get_new_data();
    string += toUtf16(chunk);
}
auto result = toUtf16.finalize();
if (result.error != QStringDecoder::FinalizeResult::Error::NoError) {
    // Handle error
}

QStringDecoderオブジェクトはチャンク間の状態を維持するので、チャンクがマルチバイト文字列の途中で分割されても正しく動作します。

QStringDecoderオブジェクトは、その内部状態のためにコピーすることはできませんが、移動することはできます。

QStringConverter およびQStringEncoderも参照のこと

メンバ型ドキュメント

[alias] QStringDecoder::FinalizeResult

これはQStringConverter::FinalizeResultChar<char16_t> のエイリアスである。

[alias] QStringDecoder::FinalizeResultQChar

これはQStringConverter::FinalizeResultChar<QChar> のエイリアスである。

メンバー関数ドキュメント

[constexpr noexcept] QStringDecoder::QStringDecoder()

デフォルトはデコーダを構築する。デフォルトのデコーダは有効ではないので、テキストの変換には使えない。

[explicit] QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)

nameflags を使ってデコーダオブジェクトを作成します。name が既知のエンコーディングの名前でない場合、無効なコンバータが作成されます。

注意: Qt 6.8 より前のバージョンでは、この関数はconst char * を受け取るだけでした。

isValid()も参照してください

[explicit constexpr] QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)

encodingflags を使ってデコーダーオブジェクトを作成します。

QChar *QStringDecoder::appendToBuffer(QChar *out, QByteArrayView in)

in で見たバイト列をデコードし、デコード結果をout から始まるバッファに書き込む。書き込まれたデータの終わりへのポインタを返す。

out は、デコードされたデータをすべて保持できる大きさが必要である。in.size() バイトのエンコードされたデータ・バッファをデコードするために必要な最大サイズを決定するには、requiredSpace 。この関数は、返された終了ポインタを過ぎたものも含め、outout + 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()も参照

[since 6.11] QStringDecoder::FinalizeResultQChar QStringDecoder::finalize(QChar *out, qsizetype maxlen)

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize(char16_t *out, qsizetype maxlen)

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize()

これ以上データが届かないことをデコーダに知らせる。

また、デコードを保留していた残存コンテンツのデータを提供することもある。考慮すべき残余データがない場合、戻り値のerror フィールドはNoError に設定される。

out が供給され、かつ非NULLの場合、maxlen 文字まで書き込めるスペースがなければならない。このスペースには、この文字数までの残余出力が書き込まれ、終了は戻り値のnext フィールドで示される。通常、この残余データは、残りの未変換入力文字1文字につき1文字の置換文字で構成される。

すべての残余コンテンツがout を介して配信された場合、outnullptr である場合、または残余データがない場合、デコーダはfinalize ()からの戻り値でリセットされる。そうでない場合は、finalize ()をさらに呼び出すことで、残りのデータを取得または破棄できます。

これらの関数はQt 6.11で導入されました。

hasError() およびappendToBuffer()も参照してください

qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const

inputLength エンコードされたデータを処理するために必要な UTF-16 コードユニットの最大量を返します。

appendToBufferも参照のこと

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::operator()(const QByteArray &ba)

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::decode(const QByteArray &ba)

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::operator()(QByteArrayView ba)

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::decode(QByteArrayView 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; };

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.