このページでは

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()

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

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

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

注: Qt 6.8 以前のバージョンでは 、この関数はconst char * のみを受け取り、その文字列は UTF-8 エンコードされていることが想定されていました。

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

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

encoding およびflags を使用して、エンコーダオブジェクトを作成します。

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

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

注: out は 、デコードされたデータすべてを格納できる十分な容量を持つ必要があります。in をエンコードするために必要な最大サイズを確認するには、requiredSpace()を使用してください。この関数は、out とout + requiredSpace() の間にある任意のバイト領域に書き込みを行う可能性があり、返される終了ポインタより先にあるバイト領域も含みます。

requiredSpace()も参照してください 。

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

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

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

QStringEncoder::DecodedData<const QString &> QStringEncoder::operator()(const QString &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()

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

デコーダに対して、これ以上のデータは到着しないことを通知します。

また、デコード待ちだった残りのコンテンツからのデータを提供する場合もあります。処理すべき残りのデータがない場合、このリターンのerror フィールドはNoError に設定されます。

out が指定され、かつnullでない場合、その領域には最大maxlen 文字が書き込まれる余地がなければならない。この領域には、最大この文字数分の残りの出力が書き込まれ、終了は戻り値のnext フィールドによって示される。通常、この残りのデータは、変換されていない残りの入力文字1文字につき1文字の置換文字で構成されるものとする。 ISO-2022-JPなどのステートフルエンコーディングを使用する場合、これは文字ストリーム内の現在の状態を復元、または終了させるためのバイトも書き込むことがある。

すべての残りのコンテンツがout を介して配信された場合、out がnullptr である場合、または残りのデータが存在しない場合、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.