QStringEncoder Class
Die Klasse QStringEncoder bietet einen zustandsbasierten Kodierer für Text. Mehr...
| Kopfzeile: | #include <QStringEncoder> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Vererbt: | QStringConverter |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QStringEncoder ist Teil von Classes for string data.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
Öffentliche Funktionen
| 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) |
Detaillierte Beschreibung
Ein Text-Encoder konvertiert Text von der Qt-internen Repräsentation in ein kodiertes Textformat unter Verwendung einer spezifischen Kodierung.
Die Konvertierung eines Strings von Unicode in die lokale Kodierung kann mit folgendem Code erreicht werden:
QString string = "..."; auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8); QByteArray encodedString = fromUtf16(string);
Der Encoder merkt sich jeden Zustand, der zwischen den Aufrufen benötigt wird, so dass die Konvertierung von Daten, die in Stücken empfangen werden, z.B. wenn sie über ein Netzwerk empfangen werden, genauso einfach ist, indem der Encoder immer dann aufgerufen wird, wenn neue Daten verfügbar sind:
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 }
Das QStringEncoder-Objekt behält den Zustand zwischen den Chunks bei und arbeitet daher auch dann korrekt, wenn ein UTF-16-Surrogatzeichen zwischen den Chunks aufgeteilt wird.
QStringEncoder-Objekte können wegen ihres internen Zustands nicht kopiert werden, aber sie können verschoben werden.
Siehe auch QStringConverter und QStringDecoder.
Dokumentation der Mitgliedstypen
[alias] QStringEncoder::FinalizeResult
Dies ist ein Alias für QStringConverter::FinalizeResultChar<char>.
Dokumentation der Mitgliedsfunktionen
[constexpr noexcept] QStringEncoder::QStringEncoder()
Standard konstruiert einen Kodierer. Der Standard-Encoder ist nicht gültig und kann nicht für die Konvertierung von Text verwendet werden.
[explicit] QStringEncoder::QStringEncoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
Erzeugt ein Encoder-Objekt unter Verwendung von name und flags. Wenn name nicht der Name einer bekannten Kodierung ist, wird ein ungültiger Konverter erzeugt.
Hinweis: In Qt-Versionen vor 6.8 nahm diese Funktion nur ein const char * entgegen, von dem erwartet wurde, dass es UTF-8-kodiert ist.
Siehe auch isValid().
[explicit constexpr] QStringEncoder::QStringEncoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
Erzeugt ein Encoder-Objekt unter Verwendung von encoding und flags.
char *QStringEncoder::appendToBuffer(char *out, QStringView in)
Kodiert in und schreibt das kodierte Ergebnis in den Puffer, beginnend bei out. Gibt einen Zeiger auf das Ende der geschriebenen Daten zurück.
Hinweis: out muss groß genug sein, um alle dekodierten Daten aufnehmen zu können. Verwenden Sie requiredSpace(), um die maximal erforderliche Größe für die Kodierung von in zu ermitteln. Diese Funktion kann in alle Bytes zwischen out und out + requiredSpace() schreiben, einschließlich derjenigen, die hinter dem zurückgegebenen Endzeiger liegen.
Siehe auch 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)
Konvertiert in und gibt eine Struktur zurück, die implizit in QByteArray konvertierbar ist.
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()
Signalisiert dem Decoder, dass keine weiteren Daten ankommen werden.
Kann auch Daten aus Restinhalten liefern, die noch nicht dekodiert wurden. Wenn es keine Restdaten zu berücksichtigen gibt, wird das Feld error der Rückgabe auf NoError gesetzt.
Wenn out geliefert wird und nicht leer ist, muss es Platz haben, in den bis zu maxlen Zeichen geschrieben werden können. In diesen Raum werden bis zu dieser Anzahl von Zeichen der Restausgabe geschrieben, wobei das Ende durch das Feld next des Rückgabewerts angezeigt wird. Normalerweise bestehen diese Restdaten aus einem Ersatzzeichen pro verbleibendem, nicht umgewandeltem Eingabezeichen. Bei Verwendung einer zustandsabhängigen Kodierung wie ISO-2022-JP können auch Bytes geschrieben werden, um den aktuellen Zustand des Zeichenstroms wiederherzustellen oder zu beenden.
Wenn der gesamte Restinhalt über out geliefert wurde, wenn out nullptr ist oder wenn keine Restdaten vorhanden sind, wird der Decoder bei der Rückkehr von finalize() zurückgesetzt. Andernfalls können die restlichen 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 QStringEncoder::requiredSpace(qsizetype inputLength) const
Gibt die maximale Anzahl von Zeichen zurück, die erforderlich sind, um inputLength dekodierte 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.