Auf dieser Seite

QStringConverter Class

Die Klasse „QStringConverter“ dient als Basisklasse für die Kodierung und Dekodierung von Text. Mehr...

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

QStringDecoder und QStringEncoder

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Typen

(since 6.11) struct FinalizeResultChar
enum Encoding { Utf8, Utf16, Utf16BE, Utf16LE, Utf32, …, System }
enum class FinalizeResultError { NoError, InvalidCharacters, NotEnoughSpace }
enum class Flag { Default, ConvertInvalidToNull, WriteBom, ConvertInitialBom, Stateless }
flags Flags

Öffentliche Funktionen

QStringConverter(QStringConverter &&)
bool hasError() const
bool isValid() const
const char *name() const
void resetState()
QStringConverter &operator=(QStringConverter &&)

Statische öffentliche Mitglieder

QStringList availableCodecs()
std::optional<QStringConverter::Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)
std::optional<QStringConverter::Encoding> encodingForHtml(QByteArrayView data)
std::optional<QStringConverter::Encoding> encodingForName(QAnyStringView name)
const char *nameForEncoding(QStringConverter::Encoding e)

Geschützte Funktionen

Ausführliche Beschreibung

Qt verwendet UTF-16 zum Speichern, Darstellen und Bearbeiten von Zeichenketten. In vielen Fällen möchten Sie möglicherweise mit Daten arbeiten, die eine andere Kodierung verwenden. Die meisten Textdaten, die über Dateien und Netzwerkverbindungen übertragen werden, sind in UTF-8 kodiert.

Die Klasse `QStringConverter` ist eine Basisklasse für die Klassen ` QStringEncoder ` und ` QStringDecoder `, die bei der Konvertierung zwischen verschiedenen Textkodierungen helfen. ` QStringDecoder ` kann eine Zeichenkette aus einer kodierten Darstellung in UTF-16 dekodieren, das Format, das Qt intern verwendet. ` QStringEncoder ` führt die umgekehrte Operation durch und kodiert UTF-16-kodierte Daten (in der Regel in Form eines ` QString`) in die gewünschte Kodierung.

Die folgenden Kodierungen werden immer unterstützt:

  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • ISO-8859-1 (Latin-1)
  • Die Systemkodierung

QStringConverter unterstützt je nach Kompilierung von Qt möglicherweise weitere Kodierungen. Wenn weitere Kodierungen unterstützt werden, können diese mit der Funktion ` availableCodecs()` aufgelistet werden.

QStringConverters können wie folgt verwendet werden, um eine kodierte Zeichenkette in UTF-16 und zurück zu konvertieren.

Angenommen, Sie haben eine in UTF-8 kodierte Zeichenkette und möchten diese in eine „ QString “-Zeichenkette konvertieren. Am einfachsten geht dies mit einem „ QStringDecoder “ wie folgt:

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

Danach enthält ` string ` den Text in dekodierter Form. Die Konvertierung einer Zeichenkette von Unicode in die lokale Kodierung ist mit der ` QStringEncoder `-Klasse ebenso einfach:

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

Um Textdateien in verschiedenen Kodierungen zu lesen oder zu schreiben, verwenden Sie ` QTextStream ` und dessen Funktion ` setEncoding()`.

Bei der Konvertierung von Daten in Blöcken, beispielsweise beim Empfang über ein Netzwerk, ist Vorsicht geboten. In solchen Fällen kann es vorkommen, dass ein Multibyte-Zeichen auf zwei Blöcke aufgeteilt wird. Im besten Fall führt dies zum Verlust eines Zeichens, im schlimmsten Fall scheitert die gesamte Konvertierung.

Sowohl ` QStringEncoder ` als auch ` QStringDecoder ` vereinfachen dies, indem sie den Status intern verfolgen. Ein einfacher erneuter Aufruf des Encoders oder Decoders mit dem nächsten Datenblock setzt die korrekte Kodierung bzw. Dekodierung der Daten automatisch fort:

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 ein Multibyte-Zeichen auf mehrere Blöcke aufgeteilt wird.

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

Siehe auch „ QTextStream “, „ QStringDecoder “ und „ QStringEncoder “.

Dokumentation zu Mitgliedstypen

enum QStringConverter::Encoding

KonstanteWertBeschreibung
QStringConverter::Utf80Konverter für die Umwandlung in oder aus UTF-8 erstellen
QStringConverter::Utf161Erstellen Sie einen Konverter für UTF-16. Beim Dekodieren wird die Byte-Reihenfolge automatisch anhand eines vorangestellten Byte-Reihenfolge-Zeichens erkannt. Ist kein solches Zeichen vorhanden oder erfolgt die Kodierung, wird die System-Byte-Reihenfolge angenommen.
QStringConverter::Utf16BE3Erstellen Sie einen Konverter für oder von Big-Endian-UTF-16.
QStringConverter::Utf16LE2Erstellen Sie einen Konverter für oder von Little-Endian-UTF-16.
QStringConverter::Utf324Erstellen Sie einen Konverter für UTF-32. Beim Dekodieren wird die Byte-Reihenfolge automatisch anhand einer vorangestellten Byte-Reihenfolge-Markierung erkannt. Ist keine vorhanden oder erfolgt die Kodierung, wird die System-Byte-Reihenfolge angenommen.
QStringConverter::Utf32BE6Erstellen Sie einen Konverter für Big-Endian-UTF-32.
QStringConverter::Utf32LE5Erstellen Sie einen Konverter für Little-Endian-UTF-32.
QStringConverter::Latin17Erstellen Sie einen Konverter für ISO-8859-1 (Latin1).
QStringConverter::System8Erstellen Sie einen Konverter in oder aus der zugrunde liegenden Kodierung der Systemlokalisierung. Bei Unix-basierten Systemen wird hierfür immer UTF-8 angenommen. Unter Windows erfolgt die Konvertierung in und aus der Codepage der Systemlokalisierung.

enum class QStringConverter::FinalizeResultError

KonstanteWertBeschreibung
QStringConverter::FinalizeResultError::NoError0Kein Fehler.
QStringConverter::FinalizeResultError::InvalidCharacters1Der Encoder wurde erfolgreich abgeschlossen, es wurden jedoch entweder während des Abschlussvorgangs oder zu einem früheren Zeitpunkt ungültige Zeichen festgestellt.
QStringConverter::FinalizeResultError::NotEnoughSpace2finalize() war nicht erfolgreich; Sie müssen den Puffer vergrößern und finalize() erneut aufrufen.

enum class QStringConverter::Flag
flags QStringConverter::Flags

KonstanteWertBeschreibung
QStringConverter::Flag::Default0Es gelten die Standard-Konvertierungsregeln.
QStringConverter::Flag::ConvertInvalidToNull0x2Ist dieses Flag gesetzt, wird jedes ungültige Eingabezeichen als Nullzeichen ausgegeben. Ist es nicht gesetzt, werden ungültige Eingabezeichen als „ QChar::ReplacementCharacter “ dargestellt, sofern die Ausgabekodierung dieses Zeichen darstellen kann; andernfalls als Fragezeichen.
QStringConverter::Flag::WriteBom0x4Bei der Konvertierung von einer Eingabekodierung ( QString ) in eine Ausgabekodierung wird ein „ QChar::ByteOrderMark “ als erstes Zeichen geschrieben, sofern die Ausgabekodierung dies unterstützt. Dies ist bei den Kodierungen UTF-8, UTF-16 und UTF-32 der Fall.
QStringConverter::Flag::ConvertInitialBom0x8Bei der Konvertierung von einer Eingabekodierung in eine Ausgabekodierung ( QString ) überspringt die Ausgabekodierung ( QStringDecoder ) üblicherweise ein führendes Byte-Reihenfolgezeichen ( QChar::ByteOrderMark). Wenn dieses Flag gesetzt ist, wird das Byte-Reihenfolgezeichen nicht übersprungen, sondern in UTF-16 konvertiert und am Anfang der erstellten Zeichenkette ( QString) eingefügt.
QStringConverter::Flag::Stateless0x1Mögliche Zustände des Konverters zwischen verschiedenen Funktionsaufrufen zum Kodieren oder Dekodieren von Zeichenfolgen werden ignoriert. Dies führt auch dazu, dass der „ QStringConverter “ einen Fehler auslöst, wenn eine unvollständige Datensequenz vorliegt.

Der Typ „Flags“ ist ein typedef für QFlags<Flag>. Er speichert eine ODER-Kombination von Flag-Werten.

Dokumentation der Mitgliedsfunktionen

[noexcept default] QStringConverter::QStringConverter(QStringConverter &&)

Erstellt eine Instanz von ` QStringConverter` mithilfe von `Move`.

[noexcept protected default] QStringConverter::~QStringConverter()

Löscht die Instanz von „ QStringConverter “.

[static] QStringList QStringConverter::availableCodecs()

Gibt eine Liste der Namen der unterstützten Codecs zurück. Die von dieser Funktion zurückgegebenen Namen können an den Konstruktor von ` QStringEncoder` und ` QStringDecoder` übergeben werden, um einen Encoder oder Decoder für den angegebenen Codec zu erstellen.

Diese Funktion kann verwendet werden, um eine Liste weiterer Codecs zu erhalten, die über die Standard-Codecs hinausgehen. Die Unterstützung zusätzlicher Codecs setzt voraus, dass Qt mit Unterstützung für die ICU-Bibliothek kompiliert wurde.

Hinweis: Die Reihenfolge der Codecs ist ein internes Implementierungsdetail und es wird keine Stabilität garantiert.

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)

Gibt die Kodierung für den Inhalt von data zurück, sofern diese ermittelt werden kann. expectedFirstCharacter kann als zusätzlicher Hinweis übergeben werden, um die Ermittlung der Kodierung zu erleichtern.

Das zurückgegebene Optional ist leer, wenn die Kodierung unklar ist.

[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)

Versucht, die Kodierung des HTML-Codes unter data zu ermitteln, indem nach führenden Byte-Order-Marks oder einem Zeichensatzangabe im HTML-Meta-Tag gesucht wird. Ist das optionale Argument leer, wird die angegebene Kodierung von QStringConverter nicht unterstützt. Wird keine Kodierung erkannt, gibt die Methode „Utf8“ zurück.

Siehe auch QStringDecoder::decoderForHtml().

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)

Konvertieren Sie „ name “ in das entsprechende „ Encoding “-Element, sofern vorhanden.

Wenn „ name “ nicht der Name eines in der Aufzählung „Encoding“ aufgeführten Codecs ist, wird „ std::nullopt “ zurückgegeben. Ein solcher Name kann dennoch vom Konstruktor „ QStringConverter “ akzeptiert werden, wenn Qt mit ICU kompiliert wurde und ICU einen Konverter mit dem angegebenen Namen bereitstellt.

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.

[noexcept] bool QStringConverter::hasError() const

Gibt „true“ zurück, wenn bei einer Konvertierung ein Zeichen nicht korrekt konvertiert werden konnte. Dies kann beispielsweise durch eine ungültige UTF-8-Sequenz ausgelöst werden oder wenn ein Zeichen aufgrund von Einschränkungen in der Zielkodierung nicht konvertiert werden kann.

[noexcept] bool QStringConverter::isValid() const

Gibt „true“ zurück, wenn es sich um einen gültigen Zeichenfolgenkonverter handelt, der zum Kodieren oder Dekodieren von Text verwendet werden kann.

Standardmäßig erstellte Zeichenfolgenkonverter oder Konverter, die mit einem nicht unterstützten Namen erstellt wurden, sind ungültig.

[noexcept] const char *QStringConverter::name() const

Gibt den kanonischen Namen der Kodierung zurück, die dieser QStringConverter kodieren oder dekodieren kann. Gibt einen nullptr zurück, wenn der Konverter ungültig ist. Der zurückgegebene Name ist UTF-8-kodiert.

Siehe auch isValid().

[static noexcept] const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)

Gibt den kanonischen Namen für die Kodierung „ e “ oder „ nullptr “ zurück, wenn „ e “ ein ungültiger Wert ist.

Hinweis: In Qt-Versionen vor 6.10, 6.9.1, 6.8.4 oder 6.5.9 führte der Aufruf dieser Funktion mit einem ungültigen Argument zu undefiniertem Verhalten. Seit den oben genannten Qt-Versionen wird stattdessen `nullptr` zurückgegeben.

[noexcept] void QStringConverter::resetState()

Setzt den internen Zustand des Wandlers zurück und löscht dabei mögliche Fehler oder unvollständige Umwandlungen.

[noexcept default] QStringConverter &QStringConverter::operator=(QStringConverter &&)

Weist „ other “ dieser „ QStringConverter “-Instanz zu.

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