このページでは

QStringEncoder Class

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

ヘッダー #include <QStringEncoder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承: QStringConverter

注意:このクラスの関数はすべてリエントラントです。

パブリック型

パブリック関数

QStringEncoder()
QStringEncoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
QStringEncoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
char *appendToBuffer(char *out, QStringView in)
QStringEncoder::DecodedData<QStringView> encode(QStringView in)
QStringEncoder::DecodedData<const QString &> encode(const QString &in)
(since 6.11) QStringEncoder::FinalizeResult finalize()
(since 6.11) QStringEncoder::FinalizeResult finalize(char *out, qsizetype maxlen)
qsizetype requiredSpace(qsizetype inputLength) const
QStringEncoder::DecodedData<QStringView> operator()(QStringView in)
QStringEncoder::DecodedData<const QString &> operator()(const QString &in)

詳細説明

テキストエンコーダは、Qt の内部表現から、特定のエンコーディングを使用してエンコードされたテキスト形式にテキストを変換します。

文字列を Unicode からローカルのエンコーディングに変換するには、以下のコードを使用します:

QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
QByteArray encodedString = fromUtf16(string);

エンコーダは呼び出しの間に必要な状態を記憶しているので、例えばネットワーク経由で受信したデータをチャンクで変換することも、新しいデータが利用可能になるたびにエンコーダを呼び出すだけで簡単にできます:

auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);

QByteArray encoded;
while (new_data_available() && !fromUtf16.hasError()) {
    QString chunk = get_new_data();
    encoded += fromUtf16(chunk);
}
auto result = fromUtf16.finalize();
if (result.error != QStringEncoder::FinalizeResult::Error::NoError) {
    // Handle error
}

QStringEncoderオブジェクトはチャンク間の状態を維持するので、UTF-16サロゲート文字がチャンク間で分割されても正しく動作します。

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

QStringConverter およびQStringDecoderも参照してください

メンバ型ドキュメント

[alias] QStringEncoder::FinalizeResult

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

メンバ関数ドキュメント

[constexpr noexcept] QStringEncoder::QStringEncoder()

デフォルトはエンコーダを構築します。デフォルトのエンコーダは無効で、テキストの変換には使えません。

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

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

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

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

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

encodingflags を使ってエンコーダーオブジェクトを作成する。

char *QStringEncoder::appendToBuffer(char *out, QStringView in)

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

注意: out は、デコードされたデータをすべて保持できる大きさでなければならない。in をエンコードするために必要な最大サイズを決定するには、requiredSpace() を使用する。この関数は、返された終了ポインタを過ぎたものも含め、outout + requiredSpace() の間の任意のバイトに書き込むことができる。

requiredSpace()も参照

QStringEncoder::DecodedData<const QString &> QStringEncoder::encode(const QString &in)

QStringEncoder::DecodedData<QStringView> QStringEncoder::encode(QStringView in)

QStringEncoder::DecodedData<const QString &> QStringEncoder::operator()(const QString &in)

QStringEncoder::DecodedData<QStringView> QStringEncoder::operator()(QStringView in)

in を変換し、QByteArray に暗黙的に変換可能な構造体を返す。

QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
auto data = fromUtf16(string); // data's type is QStringEncoder::DecodedData<const QString &>
QByteArray encodedString = fromUtf16(string); // Implicit conversion to QByteArray

// Here you have to cast "data" to QByteArray
auto func = [&]() { return !fromUtf16.hasError() ? QByteArray(data) : "foo"_ba; };

[since 6.11] QStringEncoder::FinalizeResult QStringEncoder::finalize(char *out, qsizetype maxlen)

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

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

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

out が供給され、かつ非NULLの場合、maxlen 文字まで書き込めるスペースがなければならない。このスペースには、この文字数までの残余出力が書き込まれ、終了は戻り値のnext フィールドで示される。通常、この残余データは、残りの未変換入力文字1文字につき1文字の置換文字で構成される。ISO-2022-JPのようなステートフルエンコーディングを使用している場合、これは、文字ストリームの現在の状態を復元または終了するバイトを書き込むこともできる。

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

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

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

qsizetype QStringEncoder::requiredSpace(qsizetype inputLength) const

inputLength デコードされたデータを処理するために必要な最大文字数を返す。

appendToBuffer()も参照のこと

© 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.