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() | |
| 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()
default はデコーダを構築します。デフォルトのデコーダは有効ではなく、テキストの変換には使用できません。
[explicit] QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
name およびflags を使用してデコーダオブジェクトを作成します。name が既知のエンコーディング名でない場合、無効なコンバータが作成されます。
注: Qt 6.8 以前のバージョンでは 、この関数はconst char * のみを受け取り、その文字列は UTF-8 エンコードされていることが想定されていました。
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 を使用してください。この関数は、out からout + requiredSpace() までの任意のバイトに書き込みを行う可能性があり、返された終了ポインタ以降のバイトも含まれます。
requiredSpaceも参照してください 。
[since 6.6] char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)
これはオーバーロードされた関数です。
この関数は Qt 6.6 で導入されました。
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; };[static] QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)
data 内の HTML のエンコーディングを、先頭のバイト順マークや HTML メタタグ内の文字セット指定子を確認して判定し、そのエンコーディングに一致する `QStringDecoder ` を返します。返されたデコーダーが無効な場合、指定されたエンコーディングはQStringConverter ではサポートされていません。エンコーディングが検出されない場合、このメソッドは Utf8 用のデコーダーを返します。
isValid()も参照してください 。
[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize()
[since 6.11] QStringDecoder::FinalizeResultQChar QStringDecoder::finalize(QChar *out, qsizetype maxlen)
[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize(char16_t *out, qsizetype maxlen)
デコーダに対し、これ以上のデータは到着しないことを通知します。
また、デコード待ちだった残りのコンテンツからのデータを提供する場合もあります。処理すべき残りのデータがない場合、このリターンの `error ` フィールドには `NoError` が設定されます。
out が指定され、かつnullでない場合、最大maxlen 文字が書き込めるスペースが確保されていなければならない。最大この文字数分の残存出力データがこのスペースに書き込まれ、その終了位置は戻り値のnext フィールドによって示される。通常、この残存データは、変換されていない残りの入力文字1文字につき1つの置換文字で構成されるものとする。
残りの内容がすべてout を介して送信された場合、out がnullptr である場合、または残りのデータが存在しない場合、finalize()からの戻り時にデコーダはリセットされます。それ以外の場合は、finalize()を再度呼び出すことで、残りのデータを取得または破棄することができます。
これらの関数は Qt 6.11 で導入されました。
hasError() およびappendToBuffer()も参照してください 。
qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const
inputLength でエンコードされたデータを処理するために必要な、UTF-16コードユニットの最大数を返します。
「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.