Auf dieser Seite

QStringDecoder Class

Die Klasse „QStringDecoder“ stellt einen zustandsbasierten Decoder für Text bereit. Mehr...

Header: #include <QStringDecoder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt von: QStringConverter

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Typen

Öffentliche Funktionen

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)

Statische öffentliche Mitglieder

QStringDecoder decoderForHtml(QByteArrayView data)

Ausführliche Beschreibung

Ein Textdecoder konvertiert Text aus einem kodierten Textformat, das eine bestimmte Kodierung verwendet, in die interne Darstellung von Qt.

Die Konvertierung kodierter Daten in ein „ QString “ kann mit dem folgenden Code erreicht werden:

QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string = toUtf16(encodedString);

Der Decoder speichert alle zwischen den Aufrufen erforderlichen Zustände, sodass die Konvertierung von Daten, die in Blöcken empfangen werden – beispielsweise beim Empfang über ein Netzwerk –, ebenso einfach ist, indem der Decoder aufgerufen wird, sobald neue Daten verfügbar sind:

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
}

Das QStringDecoder-Objekt behält den Zustand zwischen den Blöcken bei und funktioniert daher auch dann korrekt, wenn Blöcke mitten in einer Mehrbyte-Zeichenfolge aufgeteilt werden.

QStringDecoder-Objekte können aufgrund ihres internen Zustands nicht kopiert, aber verschoben werden.

Siehe auch QStringConverter und QStringEncoder.

Dokumentation zu den Mitgliedstypen

[alias] QStringDecoder::FinalizeResult

Dies ist ein Alias für „ QStringConverter::FinalizeResultChar<char16_t>“.

[alias] QStringDecoder::FinalizeResultQChar

Dies ist ein Alias für QStringConverter::FinalizeResultChar<QChar>.

Dokumentation zu den Member-Funktionen

[constexpr noexcept] QStringDecoder::QStringDecoder()

Standardmäßig wird ein Decoder erstellt. Der Standard-Decoder ist ungültig und kann nicht zur Konvertierung von Text verwendet werden.

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

Erstellt ein Decoder-Objekt unter Verwendung von ` name ` und ` flags`. Wenn ` name ` nicht der Name einer bekannten Kodierung ist, wird ein ungültiger Konverter erstellt.

Hinweis: In Qt-Versionen vor 6.8 nahm diese Funktion nur einen ` const char *` entgegen, von dem erwartet wurde, dass er UTF-8-kodiert war.

Siehe auch isValid().

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

Erstellt ein Decoder-Objekt unter Verwendung von „ encoding “ und „ flags “.

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

Dekodiert die von in gelesene Bytefolge und schreibt das Dekodierungsergebnis in den Puffer, beginnend bei out. Gibt einen Zeiger auf das Ende der geschriebenen Daten zurück.

out muss groß genug sein, um alle dekodierten Daten aufnehmen zu können. Verwenden Sie requiredSpace, um die maximale Größe zu ermitteln, die zum Dekodieren eines kodierten Datenpuffers von in.size() Bytes erforderlich ist. Diese Funktion kann in beliebige Bytes zwischen out und out + requiredSpace() schreiben, einschließlich derjenigen, die hinter dem zurückgegebenen Endzeiger liegen.

Siehe auch requiredSpace.

[since 6.6] char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.6 eingeführt.

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)

Konvertiert „ ba “ und gibt eine Struktur zurück, die implizit in „ QString “ konvertierbar ist.

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)

Versucht, die Kodierung des HTML-Codes unter data zu ermitteln, indem nach führenden Byte-Order-Marks oder einem Zeichensatzspezifizierer im HTML-Meta-Tag gesucht wird, und gibt einen „ QStringDecoder “ zurück, der der Kodierung entspricht. Ist der zurückgegebene Decoder ungültig, wird die angegebene Kodierung von QStringConverter nicht unterstützt. Wird keine Kodierung erkannt, gibt die Methode einen Decoder für Utf8 zurück.

Siehe auch ` 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)

Signalisiert dem Decoder, dass keine weiteren Daten mehr eintreffen werden.

Kann auch Daten aus verbleibendem Inhalt liefern, dessen Dekodierung noch aussteht. Wenn keine verbleibenden Daten vorhanden sind, wird das Feld „ error “ der Rückgabe auf „ NoError “ gesetzt.

Wenn „ out “ angegeben wird und nicht null ist, muss es einen Bereich enthalten, in den bis zu „ maxlen “ Zeichen geschrieben werden können. Bis zu dieser Zeichenanzahl an Restdaten wird in diesen Bereich geschrieben, wobei das Ende durch das Feld „ next “ des Rückgabewerts gekennzeichnet wird. In der Regel bestehen diese Restdaten aus einem Ersatzzeichen pro verbleibendem, noch nicht konvertiertem Eingabezeichen.

Wenn der gesamte Restinhalt über ` out` übermittelt wurde, wenn ` out ` den Wert ` nullptr` hat oder wenn keine Restdaten vorhanden sind, wird der Decoder bei der Rückkehr aus ` finalize()` zurückgesetzt. Andernfalls können die verbleibenden Daten durch einen weiteren Aufruf von ` finalize()` abgerufen oder verworfen werden.

Diese Funktionen wurden in Qt 6.11 eingeführt.

Siehe auch „ hasError “() und „ appendToBuffer “().

qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const

Gibt die maximale Anzahl an UTF-16-Codeeinheiten zurück, die erforderlich ist, um „ inputLength “-kodierte Daten verarbeiten zu können.

Siehe auch ` 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.