QTextCodec Class

Die Klasse QTextCodec ermöglicht Konvertierungen zwischen Textkodierungen. Mehr...

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

Hinweis: Alle Funktionen in dieser Klasse sind reentrant.

Hinweis: Diese Funktionen sind auch thread-sicher:

Öffentliche Typen

Ö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, QTextCodec::ConverterState *state = nullptr) const
QByteArray fromUnicode(QStringView str) const
QTextDecoder *makeDecoder(QTextCodec::ConversionFlags flags = DefaultConversion) const
QTextEncoder *makeEncoder(QTextCodec::ConversionFlags 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, QTextCodec::ConverterState *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, QTextCodec::ConverterState *state) const = 0
virtual QString convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state) const = 0

Detaillierte Beschreibung

Qt verwendet Unicode, um Strings zu speichern, zu zeichnen und zu manipulieren. In vielen Situationen möchten Sie vielleicht mit Daten arbeiten, die eine andere Kodierung verwenden. Zum Beispiel sind die meisten japanischen Dokumente immer noch in Shift-JIS oder ISO 2022-JP gespeichert, während russische Benutzer ihre Dokumente oft in KOI8-R oder Windows-1251 haben.

Qt bietet eine Reihe von QTextCodec-Klassen, die bei der Konvertierung von Nicht-Unicode-Formaten in und aus Unicode helfen. Sie können auch Ihre eigenen 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
  • Umschalt-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, sind die meisten von ICU unterstützten Codecs auch für die Anwendung verfügbar.

QTextCodecs kann wie folgt verwendet werden, um einen lokal kodierten String nach Unicode zu konvertieren. Angenommen, Sie haben eine Zeichenkette, die in russischer KOI8-R-Kodierung kodiert ist, und möchten sie in Unicode konvertieren. Das geht ganz einfach wie folgt:

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);

Eine gewisse Vorsicht ist geboten, wenn man versucht, die Daten in Stücken zu konvertieren, z. B. wenn sie über ein Netzwerk empfangen werden. In solchen Fällen ist es möglich, dass ein Multi-Byte-Zeichen auf zwei Chunks aufgeteilt wird. Im besten Fall kann dies zum Verlust eines Zeichens führen, im schlimmsten Fall zum Scheitern der gesamten Konvertierung.

In solchen Situationen sollte ein QTextDecoder Objekt für den Codec erstellt und dieses QTextDecoder für den gesamten Dekodierungsprozess verwendet werden, 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 Zustand zwischen den Chunks bei und funktioniert daher auch dann korrekt, wenn ein Multi-Byte-Zeichen in Chunks aufgeteilt wird.

Eigene Codec-Klasse erstellen

Unterstützung für neue Textkodierungen kann zu Qt hinzugefügt werden, indem Unterklassen von QTextCodec erstellt werden.

Die rein virtuellen Funktionen beschreiben den Kodierer für das System und der Kodierer wird je nach Bedarf in den verschiedenen von QTextStream unterstützten Textdateiformaten und unter X11 für die lokal-spezifische Zeicheneingabe und -ausgabe verwendet.

Um Qt Unterstützung für eine andere Kodierung hinzuzufügen, erstellen Sie eine Unterklasse von QTextCodec und implementieren Sie die in der Tabelle unten aufgeführten Funktionen.

FunktionBeschreibung
name()Gibt den offiziellen Namen der Kodierung zurück. Wenn die Kodierung in der IANA-Zeichensatzkodierungsdatei aufgeführt ist, sollte der Name der bevorzugte MIME-Name für die Kodierung sein.
aliases()Gibt eine Liste von alternativen Namen für die Kodierung zurück. QTextCodec bietet eine Standardimplementierung, die eine leere Liste zurückgibt. Zum Beispiel hat "ISO-8859-1" die Aliase "latin1", "CP819", "IBM819" und "iso-ir-100".
mibEnum()Gibt das MIB-Enum für die Kodierung zurück, wenn es in der IANA-Zeichensatz-Kodierungsdatei aufgeführt ist.
convertToUnicode()Konvertiert eine 8-Bit-Zeichenkette nach Unicode.
convertFromUnicode()Konvertiert eine Unicode-Zeichenkette in eine 8-Bit-Zeichenkette.

Siehe auch QTextStream, QTextDecoder, und QTextEncoder.

Dokumentation der Mitgliedstypen

[alias] QTextCodec::ConversionFlags

KonstanteBeschreibung
DefaultConversionEs ist kein Flag gesetzt.
ConvertInvalidToNullWenn dieses Flag gesetzt ist, wird jedes ungültige Eingabezeichen als Nullzeichen ausgegeben.
IgnoreHeaderIgnoriert alle Unicode-Byte-Order-Markierungen und erzeugt keine.

[alias] QTextCodec::ConverterState

Dokumentation der Mitgliederfunktionen

[protected] QTextCodec::QTextCodec()

Konstruiert einen QTextCodec und gibt ihm den höchsten Vorrang. Der QTextCodec sollte immer auf dem Heap konstruiert werden (d.h. mit new). Qt übernimmt den Besitz und löscht ihn, wenn die Anwendung beendet wird.

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

Zerstört die QTextCodec. Beachten Sie, dass Sie Codecs nicht selbst löschen sollten: Sobald sie erstellt wurden, geht die Verantwortung auf Qt über.

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 sind in der IANA-Zeichensatz-Codierungsdatei zu finden.

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

Gibt die Liste aller verfügbaren Codecs nach Namen zurück. Rufen Sie QTextCodec::codecForName() auf, um die QTextCodec für den Namen zu erhalten.

Die Liste kann viele Erwähnungen desselben Codecs enthalten, wenn der Codec Aliasnamen hat.

Hinweis: Diese Funktion ist thread-sicher.

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 zu erhalten.

Hinweis: Diese Funktion ist thread-sicher.

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

Dies ist eine überladene Funktion.

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

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

Dies ist eine überladene Funktion.

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

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

Versucht, die Kodierung des bereitgestellten HTML-Schnipsels im angegebenen Byte-Array ba zu erkennen, indem er das BOM (Byte Order Mark) und den Content-Type-Meta-Header überprüft und eine QTextCodec -Instanz zurückgibt, die in der Lage ist, das HTML in Unicode zu dekodieren. Wenn der Codec nicht anhand des bereitgestellten Inhalts erkannt werden kann, wird defaultCodec zurückgegeben.

Siehe auch codecForUtfText().

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

Dies ist eine überladene Funktion.

Versucht, die Kodierung des angegebenen HTML-Schnipsels im angegebenen Byte-Array ba zu erkennen, indem sie das BOM (Byte Order Mark) und den Content-Type-Meta-Header überprüft und eine QTextCodec -Instanz zurückgibt, die in der Lage ist, das HTML in Unicode zu dekodieren. Wenn der Codec nicht erkannt werden kann, gibt diese Überladung ein Latin-1 QTextCodec zurück.

[static] QTextCodec *QTextCodec::codecForLocale()

Gibt einen Zeiger auf den für dieses Gebietsschema am besten geeigneten Codec zurück.

Der Codec wird von ICU abgerufen, wenn dieses Backend verwendet wird, andernfalls kann er von einer betriebssystemspezifischen API bezogen werden. Im letzteren Fall kann der Name des Codecs "System" lauten.

Hinweis: Diese Funktion ist thread-sicher.

Siehe auch setCodecForLocale().

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

Gibt die QTextCodec zurück, die mit der MIBenum mib übereinstimmt.

Hinweis: Diese Funktion ist thread-sicher.

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

Durchsucht alle installierten QTextCodec Objekte und gibt dasjenige zurück, das am besten mit name übereinstimmt; Groß- und Kleinschreibung wird nicht berücksichtigt. Gibt nullptr zurück, wenn kein Codec mit dem Namen name gefunden werden konnte.

Hinweis: Diese Funktion ist thread-sicher.

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

Durchsucht alle installierten QTextCodec Objekte und gibt dasjenige zurück, das am besten mit name übereinstimmt; Groß- und Kleinschreibung wird nicht berücksichtigt. Gibt nullptr zurück, wenn kein Codec mit dem Namen name gefunden werden konnte.

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

Versucht, die Kodierung des angegebenen Snippets ba anhand des BOM (Byte Order Mark) zu erkennen und gibt eine QTextCodec Instanz zurück, die in der Lage ist, den Text in Unicode zu dekodieren. 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 angegebenen Inhalts nicht erkannt werden kann, wird defaultCodec zurückgegeben.

Siehe auch codecForHtml().

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

Dies ist eine überladene Funktion.

Versucht, die Kodierung des angegebenen Snippets ba anhand des BOM (Byte Order Mark) zu erkennen und gibt eine QTextCodec Instanz zurück, die in der Lage ist, den Text in Unicode zu dekodieren. 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 erkannt werden kann, gibt diese Überladung einen Latin-1 QTextCodec zurück.

Siehe auch codecForHtml().

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

QTextCodec Unterklassen müssen diese Funktion reimplementieren.

Konvertiert das erste number der 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 ist die Konvertierung zustandslos und die Standardkonvertierungsregeln sollten verwendet werden. Wenn state nicht nullptr ist, 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, QTextCodec::ConverterState *state) const

QTextCodec Unterklassen müssen diese Funktion reimplementieren.

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

state kann nullptr sein. In diesem Fall ist die Konvertierung zustandslos und es sollten die Standardkonvertierungsregeln verwendet werden. Wenn state nicht nullptr ist, 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.

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

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

Die state des verwendeten Konverters wird aktualisiert.

QByteArray QTextCodec::fromUnicode(QStringView str) const

Dies ist eine überladene Funktion.

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

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

Erzeugt ein QTextDecoder mit einem angegebenen flags zur Dekodierung von Chunks von char * Daten, um Chunks von Unicode-Daten zu erzeugen.

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

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

Erstellt ein QTextEncoder mit einem angegebenen flags, um Teile von Unicode-Daten 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 reimplementieren. Sie gibt das MIBenum zurück (siehe IANA-Zeichensatzkodierungsdatei für weitere Informationen). Es ist wichtig, dass jede Unterklasse von QTextCodec den richtigen eindeutigen Wert für diese Funktion zurückgibt.

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

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

Wenn der Codec als Zeichensatz in der IANA-Zeichensatzkodierungsdatei registriert ist, sollte diese Methode den bevorzugten Mime-Namen für den Codec zurückgeben, falls definiert, andernfalls seinen Namen.

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

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

Dies könnte für einige Anwendungen erforderlich sein, die ihren eigenen Mechanismus für die Einstellung des Gebietsschemas verwenden wollen.

Warnung: Diese Funktion ist nicht reentrant.

Siehe auch codecForLocale().

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

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

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

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

Die state des verwendeten Konverters wird aktualisiert.

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

Dies ist eine überladene Funktion.

chars enthält die Quellzeichen.

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