QTextCodec Class
La classe QTextCodec fournit des conversions entre les encodages de texte. Plus d'informations...
| En-tête : | #include <QTextCodec> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core5Compat)target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake : | QT += core5compat |
Note : Toutes les fonctions de cette classe sont réentrantes.
- setCodecForLocale(QTextCodec *c)
- ~QTextCodec()
Remarque : Ces fonctions sont également sûres pour les threads:
- codecForName(const QByteArray &name)
- codecForMib(int mib)
- availableCodecs()
- availableMibs()
- codecForLocale()
Fonctions publiques
| 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 |
Membres publics statiques
| 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) |
Fonctions protégées
| 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 |
Description détaillée
Qt utilise Unicode pour stocker, dessiner et manipuler les chaînes de caractères. Dans de nombreuses situations, il se peut que vous souhaitiez traiter des données qui utilisent un encodage différent. Par exemple, la plupart des documents japonais sont encore stockés en Shift-JIS ou ISO 2022-JP, tandis que les utilisateurs russes ont souvent leurs documents en KOI8-R ou Windows-1251.
Qt Help fournit un ensemble de classes QTextCodec pour faciliter la conversion des formats non-Unicode vers et depuis Unicode. Vous pouvez également créer vos propres classes de codec.
Les encodages pris en charge sont les suivants :
- Big5
- Big5-HKSCS
- CP949
- EUC-JP
- EUC-KR
- GB18030
- HP-ROMAN8
- IBM 850
- IBM 866
- IBM 874
- ISO 2022-JP
- ISO 8859-1 à 10
- ISO 8859-13 à 16
- Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg et 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 à 1258
Si Qt est compilé avec le support ICU activé, la plupart des codecs supportés par ICU seront également disponibles pour l'application.
QTextCodecs peut être utilisé comme suit pour convertir une chaîne de caractères encodée localement en Unicode. Supposons que vous ayez une chaîne de caractères encodée en russe KOI8-R et que vous souhaitiez la convertir en Unicode. La manière la plus simple de le faire est la suivante :
QByteArray encodedString = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString);
Ensuite, string contient le texte converti en Unicode. La conversion d'une chaîne de caractères d'Unicode à l'encodage local est tout aussi simple :
QString string = "..."; QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QByteArray encodedString = codec->fromUnicode(string);
Il convient de faire preuve de prudence lorsque l'on tente de convertir les données par morceaux, par exemple lors de leur réception sur un réseau. Dans ce cas, il est possible qu'un caractère de plusieurs octets soit divisé en deux morceaux. Dans le meilleur des cas, cela peut entraîner la perte d'un caractère et, dans le pire des cas, faire échouer l'ensemble de la conversion.
L'approche à adopter dans ces situations consiste à créer un objet QTextDecoder pour le codec et à utiliser cet objet QTextDecoder pour l'ensemble du processus de décodage, comme indiqué ci-dessous :
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;
L'objet QTextDecoder maintient l'état entre les morceaux et fonctionne donc correctement même si un caractère de plusieurs octets est divisé en plusieurs morceaux.
Création de votre propre classe de codec
La prise en charge de nouveaux codages de texte peut être ajoutée à Qt en créant des sous-classes de QTextCodec.
Les fonctions virtuelles pures décrivent le codeur au système et le codeur est utilisé selon les besoins dans les différents formats de fichiers texte pris en charge par QTextStream, et sous X11, pour l'entrée et la sortie des caractères spécifiques à la région.
Pour ajouter le support d'un autre encodage à Qt, créez une sous-classe de QTextCodec et implémentez les fonctions listées dans le tableau ci-dessous.
| Fonction | Description de la fonction |
|---|---|
| name() | Renvoie le nom officiel de l'encodage. Si le codage est répertorié dans le fichier de codage des jeux de caractères de l'IANA, le nom doit être le nom MIME préféré pour le codage. |
| aliases() | Retourne une liste de noms alternatifs pour l'encodage. QTextCodec fournit une implémentation par défaut qui renvoie une liste vide. Par exemple, "ISO-8859-1" a pour alias "latin1", "CP819", "IBM819", et "iso-ir-100". |
| mibEnum() | Renvoie l'enum MIB correspondant à l'encodage s'il est répertorié dans le fichier d'encodage des jeux de caractères de l'IANA. |
| convertToUnicode() | Convertit une chaîne de caractères de 8 bits en Unicode. |
| convertFromUnicode() | Convertit une chaîne Unicode en une chaîne de caractères de 8 bits. |
Voir aussi QTextStream, QTextDecoder, et QTextEncoder.
Documentation des fonctions membres
[protected] QTextCodec::QTextCodec()
Construit un QTextCodec et lui donne la plus haute priorité. Le QTextCodec doit toujours être construit sur le tas (c'est-à-dire avec new). Qt en prend la propriété et le supprimera lorsque l'application se terminera.
[virtual noexcept protected] QTextCodec::~QTextCodec()
Détruit le QTextCodec. Notez que vous ne devez pas supprimer les codecs vous-même : une fois créés, ils deviennent la responsabilité de Qt XML.
Attention : Cette fonction n'est pas réentrante.
[virtual] QList<QByteArray> QTextCodec::aliases() const
Les sous-classes peuvent renvoyer un certain nombre d'alias pour le codec en question.
Les alias standard pour les codecs se trouvent dans le fichier d'encodage des jeux de caractères de l'IANA.
[static] QList<QByteArray> QTextCodec::availableCodecs()
Renvoie la liste de tous les codecs disponibles, par nom. Appelez QTextCodec::codecForName() pour obtenir le QTextCodec correspondant au nom.
La liste peut contenir plusieurs mentions du même codec si celui-ci a des alias.
Remarque : cette fonction est sûre pour les threads.
Voir aussi availableMibs(), name() et aliases().
[static] QList<int> QTextCodec::availableMibs()
Renvoie la liste des MIB pour tous les codecs disponibles. Appelez QTextCodec::codecForMib() pour obtenir l'adresse QTextCodec de la MIB.
Remarque : cette fonction est à l'épreuve des threads.
Voir aussi availableCodecs() et mibEnum().
bool QTextCodec::canEncode(QChar ch) const
Renvoie true si le caractère Unicode ch peut être entièrement encodé avec ce codec ; sinon, renvoie false.
bool QTextCodec::canEncode(QStringView s) const
Renvoie true si la chaîne Unicode s peut être entièrement encodée avec ce codec ; sinon, renvoie false.
Il s'agit d'une fonction surchargée.
bool QTextCodec::canEncode(const QString &s) const
s contient la chaîne de caractères dont l'encodabilité est testée.
Il s'agit d'une fonction surchargée.
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
Tente de détecter le codage de l'extrait de HTML fourni dans le tableau d'octets donné, ba, en vérifiant le BOM (Byte Order Mark) et l'en-tête méta du type de contenu et renvoie une instance de QTextCodec capable de décoder le HTML en unicode. Si le codec ne peut pas être détecté à partir du contenu fourni, defaultCodec est renvoyé.
Voir aussi codecForUtfText().
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)
Tente de détecter le codage de l'extrait de code HTML fourni dans le tableau d'octets donné, ba, en vérifiant le BOM (Byte Order Mark) et l'en-tête méta du type de contenu et renvoie une instance QTextCodec capable de décoder le code HTML en unicode. Si le codec ne peut pas être détecté, cette surcharge renvoie une instance Latin-1 QTextCodec.
Il s'agit d'une fonction surchargée.
[static] QTextCodec *QTextCodec::codecForLocale()
Renvoie un pointeur vers le codec le plus adapté à cette locale.
Le codec sera récupéré à partir de l'ICU si ce backend est utilisé, sinon il peut être obtenu à partir d'une API spécifique au système d'exploitation. Dans ce dernier cas, le nom du codec peut être "System".
Remarque : cette fonction est sûre pour les threads.
Voir aussi setCodecForLocale().
[static] QTextCodec *QTextCodec::codecForMib(int mib)
Renvoie l'adresse QTextCodec qui correspond à l'adresse MIBenum mib .
Note : Cette fonction est sécurisée pour les threads.
[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)
Recherche tous les objets QTextCodec installés et renvoie celui qui correspond le mieux à name; la correspondance est insensible à la casse. Renvoie nullptr si aucun codec correspondant au nom name n'a pu être trouvé.
Remarque : cette fonction est indépendante des fils d'exécution.
[static] QTextCodec *QTextCodec::codecForName(const char *name)
Recherche tous les objets QTextCodec installés et renvoie celui qui correspond le mieux à name; la correspondance est insensible à la casse. Renvoie nullptr si aucun codec correspondant au nom name n'a pu être trouvé.
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
Tente de détecter le codage de l'extrait fourni ba en utilisant le BOM (Byte Order Mark) et renvoie une instance de QTextCodec capable de décoder le texte en unicode. Cette fonction peut détecter l'un des codecs suivants :
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Petit Endian
- UTF-16 Big Endian
- UTF-8
Si le codec ne peut être détecté à partir du contenu fourni, defaultCodec est renvoyé.
Voir aussi codecForHtml().
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
Tente de détecter le codage de l'extrait fourni ba en utilisant le BOM (Byte Order Mark) et renvoie une instance de QTextCodec capable de décoder le texte en unicode. Cette fonction peut détecter l'un des codecs suivants :
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Petit Endian
- UTF-16 Big Endian
- UTF-8
Si le codec ne peut être détecté à partir du contenu fourni, cette surcharge renvoie un Latin-1 QTextCodec.
Il s'agit d'une fonction surchargée.
Voir également codecForHtml().
[pure virtual protected] QByteArray QTextCodec::convertFromUnicode(const QChar *input, int number, int *state) const
QTextCodec Les sous-classes doivent réimplémenter cette fonction.
Convertit le premier number de caractères du tableau input d'Unicode vers l'encodage de la sous-classe, et renvoie le résultat dans un QByteArray.
state peut être nullptr, auquel cas la conversion est sans état et les règles de conversion par défaut doivent être utilisées. Si state n'est pas nullptr, le codec doit enregistrer l'état après la conversion dans state, et ajuster les membres remainingChars et invalidChars de la structure.
[pure virtual protected] QString QTextCodec::convertToUnicode(const char *chars, int len, int *state) const
QTextCodec Les sous-classes doivent réimplémenter cette fonction.
Convertit les premiers caractères len de chars de l'encodage de la sous-classe en Unicode, et renvoie le résultat dans un QString.
state peut être nullptr, auquel cas la conversion est sans état et les règles de conversion par défaut doivent être utilisées. Si state n'est pas nullptr, le codec doit enregistrer l'état après la conversion dans state, et ajuster les membres remainingChars et invalidChars de la structure.
QByteArray QTextCodec::fromUnicode(const QString &str) const
Convertit str d'Unicode vers l'encodage de ce codec, et renvoie le résultat dans un QByteArray.
QByteArray QTextCodec::fromUnicode(const QChar *input, int number, int *state = nullptr) const
Convertit le premier number de caractères du tableau input d'Unicode vers l'encodage de ce codec, et renvoie le résultat dans un QByteArray.
L'adresse state du convertisseur utilisé est mise à jour.
QByteArray QTextCodec::fromUnicode(QStringView str) const
Convertit str d'Unicode vers l'encodage de ce codec, et renvoie le résultat dans un QByteArray.
Il s'agit d'une fonction surchargée.
QTextDecoder *QTextCodec::makeDecoder(int flags = DefaultConversion) const
Crée un QTextDecoder avec un flags spécifié pour décoder des morceaux de données char * afin de créer des morceaux de données Unicode.
L'appelant est responsable de la suppression de l'objet retourné.
QTextEncoder *QTextCodec::makeEncoder(int flags = DefaultConversion) const
Crée un QTextEncoder avec un flags spécifié pour encoder des morceaux de données Unicode en tant que données char *.
L'appelant est responsable de la suppression de l'objet retourné.
[pure virtual] int QTextCodec::mibEnum() const
Les sous-classes de QTextCodec doivent réimplémenter cette fonction. Elle renvoie le MIBenum (voir le fichier de codage des jeux de caractères de l'IANA pour plus d'informations). Il est important que chaque sous-classe de QTextCodec renvoie la valeur unique correcte pour cette fonction.
[pure virtual] QByteArray QTextCodec::name() const
QTextCodec Les sous-classes doivent réimplémenter cette fonction. Elle renvoie le nom du codage pris en charge par la sous-classe.
Si le codec est enregistré en tant que jeu de caractères dans le fichier de codage des jeux de caractères de l'IANA, cette méthode doit renvoyer le nom mime préféré pour le codec s'il est défini, sinon son nom.
[static] void QTextCodec::setCodecForLocale(QTextCodec *c)
Fixe le codec à c; il sera renvoyé par codecForLocale(). Si c est nullptr, le codec est réinitialisé à sa valeur par défaut.
Cela peut s'avérer nécessaire pour certaines applications qui souhaitent utiliser leur propre mécanisme pour définir la locale.
Attention : Cette fonction n'est pas réentrante.
Voir aussi codecForLocale().
QString QTextCodec::toUnicode(const QByteArray &a) const
Convertit a de l'encodage de ce codec en Unicode, et renvoie le résultat dans un QString.
QString QTextCodec::toUnicode(const char *input, int size, int *state = nullptr) const
Convertit en Unicode les premiers caractères size de l'encodage input de ce codec et renvoie le résultat dans un QString.
Le state du convertisseur utilisé est mis à jour.
QString QTextCodec::toUnicode(const char *chars) const
chars contient les caractères source.
Il s'agit d'une fonction surchargée.
© 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.