Auf dieser Seite

QTextCodec Class

Die Klasse „QTextCodec“ ermöglicht die Konvertierung zwischen verschiedenen Textkodierungen. Mehr...

Header: #include <QTextCodec>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Hinweis: Diese Funktionen sind zudem threadsicher:

Öffentliche Funktionen

virtual QList<QByteArray> aliases() const
bool canEncode(QChar ch) const
bool canEncode(QStringView s) const
bool canEncode(const QString &s) const
QByteArray fromUnicode(const QString &str) const
QByteArray fromUnicode(const QChar *input, int number, int *state = nullptr) const
QByteArray fromUnicode(QStringView str) const
QTextDecoder *makeDecoder(int flags = DefaultConversion) const
QTextEncoder *makeEncoder(int flags = DefaultConversion) const
virtual int mibEnum() const = 0
virtual QByteArray name() const = 0
QString toUnicode(const QByteArray &a) const
QString toUnicode(const char *input, int size, int *state = nullptr) const
QString toUnicode(const char *chars) const

Statische öffentliche Mitglieder

QList<QByteArray> availableCodecs()
QList<int> availableMibs()
QTextCodec *codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
QTextCodec *codecForHtml(const QByteArray &ba)
QTextCodec *codecForLocale()
QTextCodec *codecForMib(int mib)
QTextCodec *codecForName(const QByteArray &name)
QTextCodec *codecForName(const char *name)
QTextCodec *codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
QTextCodec *codecForUtfText(const QByteArray &ba)
void setCodecForLocale(QTextCodec *c)

Geschützte Funktionen

QTextCodec()
virtual ~QTextCodec()
virtual QByteArray convertFromUnicode(const QChar *input, int number, int *state) const = 0
virtual QString convertToUnicode(const char *chars, int len, int *state) const = 0

Ausführliche Beschreibung

Qt verwendet Unicode zum Speichern, Darstellen und Bearbeiten von Zeichenketten. In vielen Situationen möchten Sie möglicherweise mit Daten arbeiten, die eine andere Kodierung verwenden. Beispielsweise werden die meisten japanischen Dokumente nach wie vor in Shift-JIS oder ISO 2022-JP gespeichert, während russische Benutzer ihre Dokumente häufig in KOI8-R oder Windows-1251 vorhalten.

Qt stellt eine Reihe von QTextCodec-Klassen zur Verfügung, die bei der Konvertierung von Nicht-Unicode-Formaten in Unicode und umgekehrt helfen. Sie können auch eigene Codec-Klassen erstellen.

Die unterstützten Kodierungen sind:

  • Big5
  • Big5-HKSCS
  • CP949
  • EUC-JP
  • EUC-KR
  • GB18030
  • HP-ROMAN8
  • IBM 850
  • IBM 866
  • IBM 874
  • ISO 2022-JP
  • ISO 8859-1 bis 10
  • ISO 8859-13 bis 16
  • Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg und Tml
  • KOI8-R
  • KOI8-U
  • Macintosh
  • Shift-JIS
  • TIS-620
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • Windows-1250 bis 1258

Wenn Qt mit aktivierter ICU-Unterstützung kompiliert wurde, stehen der Anwendung auch die meisten von ICU unterstützten Codecs zur Verfügung.

QTextCodecs können wie folgt verwendet werden, um eine lokal kodierte Zeichenkette in Unicode zu konvertieren. Angenommen, Sie haben eine Zeichenkette, die in der russischen KOI8-R-Kodierung kodiert ist, und möchten diese in Unicode konvertieren. Der einfachste Weg, dies zu tun, sieht wie folgt aus:

QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);

Danach enthält ` string ` den in Unicode konvertierten Text. Die Konvertierung einer Zeichenkette von Unicode in die lokale Kodierung ist ebenso einfach:

QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);

Bei der Konvertierung von Daten in Blöcken, beispielsweise beim Empfang über ein Netzwerk, ist Vorsicht geboten. In solchen Fällen ist es möglich, 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.

In solchen Situationen empfiehlt es sich, ein ` QTextDecoder `-Objekt für den Codec zu erstellen und diesen ` QTextDecoder ` für den gesamten Dekodierungsprozess zu verwenden, wie unten gezeigt:

QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
QTextDecoder *decoder = codec->makeDecoder();

QString string;
while (new_data_available()) {
    QByteArray chunk = get_new_data();
    string += decoder->toUnicode(chunk);
}
delete decoder;

Das „ QTextDecoder “-Objekt behält den Status zwischen den Blöcken bei und funktioniert daher auch dann korrekt, wenn ein Multibyte-Zeichen auf mehrere Blöcke aufgeteilt wird.

Erstellen einer eigenen Codec-Klasse

Die Unterstützung für neue Textkodierungen kann in Qt durch die Erstellung von Unterklassen von `QTextCodec` hinzugefügt werden.

Die rein virtuellen Funktionen beschreiben den Encoder für das System, und der Decoder wird je nach Bedarf in den verschiedenen von ` QTextStream` unterstützten Textdateiformaten sowie unter X11 für die lokalisierungsspezifische Zeicheneingabe und -ausgabe verwendet.

Um Qt um die Unterstützung für eine weitere Kodierung zu erweitern, erstellen Sie eine Unterklasse von `QTextCodec` und implementieren Sie die in der folgenden Tabelle aufgeführten Funktionen.

FunktionBeschreibung
name()Gibt den offiziellen Namen der Kodierung zurück. Wenn die Kodierung in der IANA-Datei für Zeichensätze und Kodierungen aufgeführt ist, sollte der Name dem bevorzugten MIME-Namen für die Kodierung entsprechen.
aliases()Gibt eine Liste alternativer Namen für die Kodierung zurück. QTextCodec stellt eine Standardimplementierung bereit, die eine leere Liste zurückgibt. Beispielsweise hat „ISO-8859-1“ die Aliase „latin1“, „CP819“, „IBM819“ und „iso-ir-100“.
mibEnum()Gibt die MIB-Enumeration für die Kodierung zurück, sofern diese in der IANA-Datei für Zeichensätze und Kodierungen aufgeführt ist.
convertToUnicode()Konvertiert eine 8-Bit-Zeichenkette in Unicode.
convertFromUnicode()Konvertiert eine Unicode-Zeichenkette in eine 8-Bit-Zeichenkette.

Siehe auch QTextStream, QTextDecoder und QTextEncoder.

Dokumentation zu den Member-Funktionen

[protected] QTextCodec::QTextCodec()

Erstellt einen QTextCodec und weist ihm die höchste Priorität zu. Der QTextCodec sollte immer auf dem Heap erstellt werden (d. h. mit ` new`). Qt übernimmt die Verantwortung dafür und löscht ihn, wenn die Anwendung beendet wird.

[virtual noexcept protected] QTextCodec::~QTextCodec()

Löscht die ` QTextCodec`. Beachten Sie, dass Sie Codecs nicht selbst löschen sollten: Sobald sie erstellt wurden, fallen sie in den Verantwortungsbereich von Qt.

Warnung: Diese Funktion ist nicht reentrant.

[virtual] QList<QByteArray> QTextCodec::aliases() const

Unterklassen können eine Reihe von Aliasen für den betreffenden Codec zurückgeben.

Standard-Aliase für Codecs finden sich in der IANA-Datei zu Zeichensätzen und Kodierungen.

[static] QList<QByteArray> QTextCodec::availableCodecs()

Gibt die Liste aller verfügbaren Codecs nach Namen sortiert zurück. Rufen Sie „ QTextCodec::codecForName()“ auf, um die „ QTextCodec “ für den jeweiligen Namen abzurufen.

Die Liste kann mehrere Einträge für denselben Codec enthalten, wenn der Codec Aliase hat.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch availableMibs(), name() und aliases().

[static] QList<int> QTextCodec::availableMibs()

Gibt die Liste der MIBs für alle verfügbaren Codecs zurück. Rufen Sie „ QTextCodec::codecForMib()“ auf, um die „ QTextCodec “ für die MIB abzurufen.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch availableCodecs() und mibEnum().

bool QTextCodec::canEncode(QChar ch) const

Gibt „ true “ zurück, wenn das Unicode-Zeichen „ ch “ mit diesem Codec vollständig kodiert werden kann; andernfalls wird „ false “ zurückgegeben.

bool QTextCodec::canEncode(QStringView s) const

Gibt „ true “ zurück, wenn die Unicode-Zeichenkette „ s “ mit diesem Codec vollständig kodiert werden kann; andernfalls wird „ false “ zurückgegeben.

Hinweis: Wenn die Eingabegröße INT_MAX überschreitet, führt diese Funktion keine Prüfungen durch und gibt false zurück.

Dies ist eine überladene Funktion.

bool QTextCodec::canEncode(const QString &s) const

s enthält die Zeichenkette, die auf ihre Kodierbarkeit geprüft wird.

Hinweis: Wenn die Eingabegröße INT_MAX überschreitet, führt diese Funktion keine Prüfungen durch und gibt false zurück.

Dies ist eine überladene Funktion.

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)

Versucht, die Kodierung des bereitgestellten HTML-Ausschnitts im angegebenen Byte-Array zu ermitteln ( ba), indem das BOM (Byte Order Mark) und der Content-Type-Meta-Header überprüft werden, und gibt eine Instanz von ` QTextCodec ` zurück, die in der Lage ist, den HTML-Code in Unicode zu dekodieren. Kann der Codec anhand des bereitgestellten Inhalts nicht ermittelt werden, wird ` defaultCodec ` zurückgegeben.

Siehe auch codecForUtfText().

[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)

Versucht, die Kodierung des bereitgestellten HTML-Ausschnitts im angegebenen Byte-Array ba zu ermitteln, indem das BOM (Byte Order Mark) und der Content-Type-Meta-Header überprüft werden, und gibt eine QTextCodec -Instanz zurück, die in der Lage ist, den HTML-Code in Unicode zu dekodieren. Kann der Codec nicht ermittelt werden, gibt diese Überladung ein Latin-1- QTextCodec zurück.

Dies ist eine überladene Funktion.

[static] QTextCodec *QTextCodec::codecForLocale()

Gibt einen Zeiger auf den für diese Locale am besten geeigneten Codec zurück.

Der Codec wird aus ICU abgerufen, sofern dieses Backend verwendet wird; andernfalls kann er über eine betriebssystemspezifische API bezogen werden. Im letzteren Fall lautet der Name des Codecs möglicherweise „System“.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch ` setCodecForLocale()`.

[static] QTextCodec *QTextCodec::codecForMib(int mib)

Gibt das „ QTextCodec “ zurück, das dem „ MIBenum “ mib entspricht.

Hinweis: Diese Funktion ist threadsicher.

[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)

Durchsucht alle installierten „ QTextCodec “-Objekte und gibt dasjenige zurück, das am besten mit „ name “ übereinstimmt; dabei wird die Groß-/Kleinschreibung nicht berücksichtigt. Gibt „ nullptr “ zurück, wenn kein Codec gefunden wurde, der dem Namen „ name “ entspricht.

Hinweis: Diese Funktion ist threadsicher.

[static] QTextCodec *QTextCodec::codecForName(const char *name)

Durchsucht alle installierten „ QTextCodec “-Objekte und gibt dasjenige zurück, das am besten mit „ name “ übereinstimmt; dabei wird die Groß-/Kleinschreibung nicht berücksichtigt. Gibt „ nullptr “ zurück, wenn kein Codec gefunden wurde, der dem Namen „ name “ entspricht.

[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)

Versucht, die Kodierung des übergebenen Textabschnitts ba mithilfe des BOM (Byte Order Mark) zu ermitteln, und gibt eine QTextCodec -Instanz zurück, die den Text in Unicode dekodieren kann. Diese Funktion kann einen der folgenden Codecs erkennen:

  • UTF-32 Little Endian
  • UTF-32 Big Endian
  • UTF-16 Little Endian
  • UTF-16 Big Endian
  • UTF-8

Wenn der Codec anhand des bereitgestellten Inhalts nicht ermittelt werden kann, wird „ defaultCodec “ zurückgegeben.

Siehe auch codecForHtml().

[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)

Versucht, die Kodierung des übergebenen Textabschnitts ba anhand des BOM (Byte Order Mark) zu ermitteln, und gibt eine Instanz von ` QTextCodec ` zurück, mit der der Text in Unicode dekodiert werden kann. Diese Funktion kann einen der folgenden Kodecs erkennen:

  • UTF-32 Little Endian
  • UTF-32 Big Endian
  • UTF-16 Little Endian
  • UTF-16 Big Endian
  • UTF-8

Wenn der Codec anhand des bereitgestellten Inhalts nicht ermittelt werden kann, gibt diese Überladung einen Latin-1- QTextCodec zurück.

Dies ist eine überladene Funktion.

Siehe auch ` codecForHtml()`.

[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, int *state) const

QTextCodec Unterklassen müssen diese Funktion neu implementieren.

Konvertiert die ersten number Zeichen aus dem Array input von Unicode in die Kodierung der Unterklasse und gibt das Ergebnis in einem QByteArray zurück.

state kann „ nullptr “ sein; in diesem Fall erfolgt die Konvertierung zustandslos und es sollten die Standardkonvertierungsregeln verwendet werden. Ist „ state “ nicht „ nullptr “, sollte der Codec den Zustand nach der Konvertierung in „ state “ speichern und die Mitglieder „ remainingChars “ und „ invalidChars “ der Struktur anpassen.

[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, int *state) const

QTextCodec Unterklassen müssen diese Funktion neu implementieren.

Konvertiert die ersten len Zeichen von chars aus der Kodierung der Unterklasse in Unicode und gibt das Ergebnis in einem QString zurück.

state kann „ nullptr “ sein; in diesem Fall erfolgt die Konvertierung zustandslos und es sollten die Standardkonvertierungsregeln verwendet werden. Ist „ state “ nicht „ nullptr “, sollte der Codec den Zustand nach der Konvertierung in „ state “ speichern und die Mitglieder „ remainingChars “ und „ invalidChars “ der Struktur anpassen.

QByteArray QTextCodec::fromUnicode(const QString &str) const

Konvertiert str von Unicode in die Kodierung dieses Codecs und gibt das Ergebnis in einem QByteArray zurück.

Hinweis: Wenn die Eingabe INT_MAX überschreitet, führt diese Funktion keine Konvertierung durch und gibt ein leeres QByteArray zurück. Bei längeren Eingaben sollte die Aufteilung in Blöcke auf der aufrufenden Seite mithilfe der Überladung implementiert werden, die ConverterState akzeptiert.

QByteArray QTextCodec::fromUnicode(const QChar *input, int number, int *state = nullptr) const

Konvertiert die ersten number Zeichen aus dem Array „ input “ von Unicode in die Kodierung dieses Codecs und gibt das Ergebnis in einem „ QByteArray “ zurück.

Der state des verwendeten Konverters wird aktualisiert.

QByteArray QTextCodec::fromUnicode(QStringView str) const

Konvertiert ` str ` von Unicode in die Kodierung dieses Codecs und gibt das Ergebnis in einem ` QByteArray` zurück.

Hinweis: Wenn die Eingabe größer als ` INT_MAX` ist, führt diese Funktion keine Konvertierung durch und gibt ein leeres ` QByteArray` zurück. Bei längeren Eingaben sollten Sie die Aufteilung auf der aufrufenden Seite implementieren, indem Sie die Überladung verwenden, die `ConverterState` akzeptiert.

Dies ist eine überladene Funktion.

QTextDecoder *QTextCodec::makeDecoder(int flags = DefaultConversion) const

Erstellt ein „ QTextDecoder “-Objekt mit einem angegebenen „ flags “, um „ char * “-Datenblöcke zu dekodieren und daraus Unicode-Datenblöcke zu erzeugen.

Der Aufrufer ist für das Löschen des zurückgegebenen Objekts verantwortlich.

QTextEncoder *QTextCodec::makeEncoder(int flags = DefaultConversion) const

Erstellt ein ` QTextEncoder ` mit einem angegebenen ` flags `, um Unicode-Datenblöcke als ` char * `-Daten zu kodieren.

Der Aufrufer ist dafür verantwortlich, das zurückgegebene Objekt zu löschen.

[pure virtual] int QTextCodec::mibEnum() const

Unterklassen von ` QTextCodec ` müssen diese Funktion neu implementieren. Sie gibt den `MIBenum` zurück (weitere Informationen finden Sie in der IANA-Datei zu Zeichensätzen und Kodierungen ). Es ist wichtig, dass jede Unterklasse von ` QTextCodec ` für diese Funktion den korrekten, eindeutigen Wert zurückgibt.

[pure virtual] QByteArray QTextCodec::name() const

QTextCodec Unterklassen müssen diese Funktion neu implementieren. Sie gibt den Namen der von der Unterklasse unterstützten Kodierung zurück.

Ist der Codec als Zeichensatz in der IANA-Zeichensatz-Kodierungsdatei registriert, sollte diese Methode den bevorzugten MIME-Namen für den Codec zurückgeben, sofern dieser definiert ist; andernfalls seinen Namen.

[static] void QTextCodec::setCodecForLocale(QTextCodec *c)

Setzen Sie den Codec auf „ c “; dieser Wert wird von „ codecForLocale()“ zurückgegeben. Wenn „ c “ gleich „ nullptr “ ist, wird der Codec auf den Standardwert zurückgesetzt.

Dies kann für einige Anwendungen erforderlich sein, die ihren eigenen Mechanismus zur Einstellung der Locale verwenden möchten.

Warnung: Diese Funktion ist nicht reentrant.

Siehe auch ` codecForLocale()`.

QString QTextCodec::toUnicode(const QByteArray &a) const

Konvertiert a aus der Kodierung dieses Codecs in Unicode und gibt das Ergebnis in einem QString zurück.

Hinweis: Wenn die Eingabe die Länge von ` INT_MAX` überschreitet, führt diese Funktion keine Konvertierung durch und gibt ein leeres ` QString` zurück. Bei längeren Eingaben sollte die Aufteilung in Blöcke auf der aufrufenden Seite mithilfe der Überladung implementiert werden, die `ConverterState` akzeptiert.

QString QTextCodec::toUnicode(const char *input, int size, int *state = nullptr) const

Konvertiert die ersten size Zeichen aus dem input von der Kodierung dieses Codecs in Unicode und gibt das Ergebnis in einem QString zurück.

Der state des verwendeten Konverters wird aktualisiert.

QString QTextCodec::toUnicode(const char *chars) const

chars enthält die Quellzeichen.

Hinweis: Wenn die Eingabe größer als ` INT_MAX` ist, führt diese Funktion keine Konvertierung durch und gibt ein leeres ` QString` zurück. Bei längeren Eingaben sollte die Aufteilung auf der aufrufenden Seite mithilfe der Überladung implementiert werden, die `ConverterState` akzeptiert.

Dies ist eine überladene Funktion.

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