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.
- setCodecForLocale(QTextCodec *c)
- ~QTextCodec()
Hinweis: Diese Funktionen sind auch thread-sicher:
- codecForName(const QByteArray &name)
- codecForMib(int mib)
- availableCodecs()
- availableMibs()
- codecForLocale()
Ö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.
Funktion | Beschreibung |
---|---|
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
Konstante | Beschreibung |
---|---|
DefaultConversion | Es ist kein Flag gesetzt. |
ConvertInvalidToNull | Wenn dieses Flag gesetzt ist, wird jedes ungültige Eingabezeichen als Nullzeichen ausgegeben. |
IgnoreHeader | Ignoriert 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.