QTextCodec Class
La classe QTextCodec permet d'effectuer des conversions entre différents encodages de texte. En savoir plus...
| En-tête : | #include <QTextCodec> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake : | QT += core5compat |
Remarque : 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, afficher et manipuler des chaînes de caractères. Dans de nombreux cas, vous pouvez être amené à traiter des données utilisant un encodage différent. Par exemple, la plupart des documents japonais sont encore stockés au format Shift-JIS ou ISO 2022-JP, tandis que les utilisateurs russes ont souvent leurs documents au format KOI8-R ou Windows-1251.
Qt fournit un ensemble de classes QTextCodec pour faciliter la conversion entre les formats non Unicode et Unicode. Vous pouvez également créer vos propres classes de codecs.
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 pris en charge par ICU seront également disponibles pour l'application.
QTextCodecLa fonction `s` peut être utilisée comme suit pour convertir une chaîne encodée localement en Unicode. Supposons que vous disposiez d’une chaîne encodée en KOI8-R (encodage russe) et que vous souhaitiez la convertir en Unicode. La méthode la plus simple consiste à procéder ainsi :
QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);À l’issue de cette opération, la variable ` string ` contient le texte converti en Unicode. La conversion d’une chaîne de caractères de l’Unicode vers 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 des données par blocs, par exemple lors de leur réception sur un réseau. Dans de tels cas, il est possible qu'un caractère multi-octets soit fractionné en deux blocs. Au mieux, cela peut entraîner la perte d'un caractère ; au pire, cela peut faire échouer l'ensemble de la conversion.
Dans ces situations, il convient de créer un objet ` QTextDecoder ` pour le codec et d’utiliser cet ` QTextDecoder ` pendant tout le processus de décodage, comme illustré 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 ` conserve l’état d’un bloc à l’autre et fonctionne donc correctement même si un caractère multioctet est réparti sur plusieurs blocs.
Créer sa propre classe de codec
Il est possible d’ajouter la prise en charge de nouveaux encodages de texte à Qt en créant des sous-classes de QTextCodec.
Les fonctions virtuelles pures décrivent l’encodeur au système ; l’encodeur est utilisé selon les besoins dans les différents formats de fichiers texte pris en charge par QTextStream, ainsi que sous X11, pour la saisie et l’affichage de caractères spécifiques à la locale.
Pour ajouter la prise en charge d’un autre encodage à Qt, créez une sous-classe de QTextCodec et implémentez les fonctions répertoriées dans le tableau ci-dessous.
| Fonction | Description |
|---|---|
| name() | Renvoie le nom officiel de l'encodage. Si l'encodage figure dans le fichier d'encodage des jeux de caractères de l'IANA, le nom doit correspondre au nom MIME recommandé pour cet encodage. |
| aliases() | Renvoie 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’énumération MIB correspondant à l’encodage s’il figure dans le fichier d’encodage des jeux de caractères de l’IANA. |
| convertToUnicode() | Convertit une chaîne de caractères 8 bits en Unicode. |
| convertFromUnicode() | Convertit une chaîne Unicode en une chaîne de caractères 8 bits. |
Voir également QTextStream, QTextDecoder et QTextEncoder.
Documentation sur les fonctions membres
[protected] QTextCodec::QTextCodec()
Crée un objet `QTextCodec` et lui attribue la priorité la plus élevée. L'objet `QTextCodec` doit toujours être créé sur le tas (c'est-à-dire avec ` new`). Qt en prend la propriété et le supprimera à la fermeture de l'application.
[virtual noexcept protected] QTextCodec::~QTextCodec()
Supprime l'QTextCodec. Notez que vous ne devez pas supprimer vous-même les codecs : une fois créés, ils relèvent de la responsabilité de Qt.
Avertissement : cette fonction n'est pas réentrante.
[virtual] QList<QByteArray> QTextCodec::aliases() const
Les sous-classes peuvent renvoyer plusieurs alias pour le codec en question.
Les alias standard des codecs figurent 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, classés par nom. Appelez la fonction ` QTextCodec::codecForName()` pour obtenir l'QTextCodec s relatives à un nom donné.
La liste peut contenir plusieurs occurrences d'un même codec si celui-ci possède des alias.
Remarque : cette fonction est thread-safe.
Voir également availableMibs(), name() et aliases().
[static] QList<int> QTextCodec::availableMibs()
Renvoie la liste des MIB pour tous les codecs disponibles. Appelez la fonction QTextCodec::codecForMib() pour obtenir l'QTextCodec s relatives à la MIB.
Remarque : cette fonction est thread-safe.
Voir également 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 ».
Remarque : si la taille de l'entrée dépasse INT_MAX, cette fonction n'effectue aucune vérification et renvoie false.
Il s’agit d’une fonction surchargée.
bool QTextCodec::canEncode(const QString &s) const
s contient la chaîne dont on vérifie si elle peut être encodée.
Remarque : si la taille de l'entrée dépasse INT_MAX, cette fonction n'effectue aucune vérification et renvoie false.
Il s'agit d'une fonction surchargée.
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
Tente de détecter l'encodage 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 « content-type », puis renvoie une instance de ` QTextCodec ` capable de décoder le code HTML en Unicode. Si le codec ne peut pas être détecté à partir du contenu fourni, la valeur defaultCodec est renvoyée.
Voir également codecForUtfText().
[static] QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)
Tente de détecter l'encodage 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 meta « content-type », puis renvoie une instance de QTextCodec capable de décoder le code HTML en Unicode. Si le codec ne peut pas être détecté, cette surcharge renvoie une instance de Latin-1 QTextCodec.
Il s'agit d'une fonction surchargée.
[static] QTextCodec *QTextCodec::codecForLocale()
Renvoie un pointeur vers le codec le mieux adapté à cette configuration régionale.
Le codec sera récupéré depuis ICU lorsque ce backend est utilisé ; sinon, il pourra être obtenu via une API spécifique au système d'exploitation. Dans ce dernier cas, le nom du codec peut être « System ».
Remarque : cette fonction est thread-safe.
Voir également setCodecForLocale().
[static] QTextCodec *QTextCodec::codecForMib(int mib)
Renvoie l'QTextCodec qui correspond à l'MIBenum mib .
Remarque : cette fonction est thread-safe.
[static] QTextCodec *QTextCodec::codecForName(const QByteArray &name)
Recherche parmi tous les objets « QTextCodec » installés et renvoie celui qui correspond le mieux à « name » ; la correspondance ne tient pas compte de la casse. Renvoie « nullptr » si aucun codec correspondant au nom « name » n’a pu être trouvé.
Remarque : cette fonction est thread-safe.
[static] QTextCodec *QTextCodec::codecForName(const char *name)
Recherche parmi tous les objets installés de type « QTextCodec » et renvoie celui qui correspond le mieux à « name » ; la correspondance ne tient pas compte de 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 l'encodage de l'extrait fourni ba à l'aide du 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 codages suivants :
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Little Endian
- UTF-16 Big Endian
- UTF-8
Si le codec ne peut pas être détecté à partir du contenu fourni, la valeur « defaultCodec » est renvoyée.
Voir aussi codecForHtml().
[static] QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
Tente de détecter l'encodage de l'extrait fourni ba à l'aide du BOM (Byte Order Mark) et renvoie une instance de ` QTextCodec ` capable de décoder le texte au format Unicode. Cette fonction peut détecter l'un des codages suivants :
- UTF-32 Little Endian
- UTF-32 Big Endian
- UTF-16 Little Endian
- UTF-16 Big Endian
- UTF-8
Si le codec ne peut pas être détecté à partir du contenu fourni, cette surcharge renvoie un QTextCodec au format Latin-1.
Il s'agit d'une fonction surchargée.
Voir aussi 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 la première number de caractères du tableau ` input ` du format Unicode vers l'encodage de la sous-classe, et renvoie le résultat dans un ` QByteArray`.
state peut être de type ` 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 de type ` nullptr`, le codec doit enregistrer l’état après la conversion dans ` state`, puis 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 len caractères de chars de l'encodage de la sous-classe vers Unicode, et renvoie le résultat dans un QString.
state peut être de type ` 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 de type ` nullptr`, le codec doit enregistrer l’état après la conversion dans ` state`, puis ajuster les membres ` remainingChars ` et ` invalidChars ` de la structure.
QByteArray QTextCodec::fromUnicode(const QString &str) const
Convertit str de l'Unicode vers l'encodage de ce codec, puis renvoie le résultat dans un objet QByteArray.
Remarque : si l'entrée dépasse la taille de « INT_MAX », cette fonction n'effectue aucune conversion et renvoie un « QByteArray » vide. Pour les entrées plus longues, implémentez le fractionnement côté appelant, en utilisant la surcharge qui prend un « ConverterState ».
QByteArray QTextCodec::fromUnicode(const QChar *input, int number, int *state = nullptr) const
Convertit les premiers number de caractères du tableau ` input ` du format Unicode vers l'encodage de ce codec, puis renvoie le résultat dans un objet ` QByteArray`.
L'state du convertisseur utilisé est mise à jour.
QByteArray QTextCodec::fromUnicode(QStringView str) const
Convertit str de l'Unicode vers l'encodage de ce codec, puis renvoie le résultat dans un QByteArray.
Remarque : si l'entrée dépasse la longueur de ` INT_MAX`, cette fonction n'effectue aucune conversion et renvoie un ` QByteArray` vide. Pour les entrées plus longues, implémentez le découpage en blocs côté appelant, en utilisant la surcharge qui prend un `ConverterState`.
Il s’agit d’une fonction surchargée.
QTextDecoder *QTextCodec::makeDecoder(int flags = DefaultConversion) const
Crée un objet ` QTextDecoder ` avec une ` flags ` spécifiée afin de décoder des blocs de données au format « char * » pour générer des blocs de données Unicode.
L'appelant est chargé de supprimer l'objet renvoyé.
QTextEncoder *QTextCodec::makeEncoder(int flags = DefaultConversion) const
Crée un objet ` QTextEncoder ` avec une ` flags ` spécifiée afin d'encoder des blocs de données Unicode sous forme de données « char * ».
L'appelant est chargé de supprimer l'objet renvoyé.
[pure virtual] int QTextCodec::mibEnum() const
Les sous-classes de ` QTextCodec ` doivent réimplémenter cette fonction. Elle renvoie un `MIBenum` (voir le fichier d'encodage 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 de l'encodage pris en charge par la sous-classe.
Si le codec est enregistré en tant que jeu de caractères dans le fichier d'encodage des jeux de caractères de l'IANA, cette méthode doit renvoyer le nom MIME préféré du codec s'il est défini, sinon son nom.
[static] void QTextCodec::setCodecForLocale(QTextCodec *c)
Définissez le codec sur c; cette valeur sera renvoyée par la fonction codecForLocale(). Si c est égal à 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 de configuration des paramètres régionaux.
Avertissement : cette fonction n’est pas réentrante.
Voir également codecForLocale().
QString QTextCodec::toUnicode(const QByteArray &a) const
Convertit a de l'encodage de ce codec vers Unicode, et renvoie le résultat dans un objet de type QString.
Remarque : si l'entrée dépasse la longueur de ` INT_MAX`, cette fonction n'effectue aucune conversion et renvoie un ` QString` vide. Pour les entrées plus longues, implémentez le découpage en blocs côté appelant, en utilisant la surcharge qui prend un `ConverterState`.
QString QTextCodec::toUnicode(const char *input, int size, int *state = nullptr) const
Convertit les premiers caractères de type « size » issus de l'input, de l'encodage de ce codec vers Unicode, puis renvoie le résultat dans un objet de type « QString ».
L'state du convertisseur utilisé est mise à jour.
QString QTextCodec::toUnicode(const char *chars) const
chars contient les caractères de la chaîne source.
Remarque : si l'entrée dépasse INT_MAX, cette fonction n'effectue aucune conversion et renvoie un objet vide QString. Pour les entrées plus longues, implémentez le découpage en blocs côté appelant, en utilisant la surcharge qui prend un ConverterState.
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.