Sur cette page

QStringConverter Class

La classe QStringConverter sert de classe de base pour l'encodage et le décodage de texte. En savoir plus...

En-tête : #include <QStringConverter>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérité par :

QStringDecoder et QStringEncoder

Remarque : toutes les fonctions de cette classe sont réentrantes.

Types publics

(since 6.11) struct FinalizeResultChar
enum Encoding { Utf8, Utf16, Utf16BE, Utf16LE, Utf32, …, System }
enum class FinalizeResultError { NoError, InvalidCharacters, NotEnoughSpace }
enum class Flag { Default, ConvertInvalidToNull, WriteBom, ConvertInitialBom, Stateless }
flags Flags

Fonctions publiques

QStringConverter(QStringConverter &&)
bool hasError() const
bool isValid() const
const char *name() const
void resetState()
QStringConverter &operator=(QStringConverter &&)

Membres publics statiques

QStringList availableCodecs()
std::optional<QStringConverter::Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)
std::optional<QStringConverter::Encoding> encodingForHtml(QByteArrayView data)
std::optional<QStringConverter::Encoding> encodingForName(QAnyStringView name)
const char *nameForEncoding(QStringConverter::Encoding e)

Fonctions protégées

Description détaillée

Qt utilise l'encodage UTF-16 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. La plupart des données textuelles transférées via des fichiers et des connexions réseau sont encodées en UTF-8.

La classe `QStringConverter` est une classe de base pour les classes ` QStringEncoder ` et ` QStringDecoder `, qui facilitent la conversion entre différents encodages de texte. ` QStringDecoder ` permet de décoder une chaîne de caractères à partir d’une représentation encodée vers l’UTF-16, le format utilisé en interne par Qt. ` QStringEncoder ` effectue l’opération inverse, en encodant des données encodées en UTF-16 (généralement sous la forme d’un ` QString`) vers l’encodage demandé.

Les encodages suivants sont toujours pris en charge :

  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • ISO-8859-1 (Latin-1)
  • L'encodage système

QStringConverter peut prendre en charge d’autres encodages selon la manière dont Qt a été compilé. Si d’autres codecs sont pris en charge, ils peuvent être répertoriés à l’aide de la fonction availableCodecs().

QStringConverterLa fonction `xml-ph-0000@deepl.internal()` peut être utilisée comme suit pour convertir une chaîne encodée vers et depuis l’UTF-16.

Supposons que vous disposiez d’une chaîne encodée en UTF-8 et que vous souhaitiez la convertir en QString. La méthode la plus simple consiste à utiliser un QStringDecoder comme suit :

QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
QString string = toUtf16(encodedString);

À l’issue de cette opération, string contient le texte sous sa forme décodée. La conversion d’une chaîne de caractères de l’Unicode vers l’encodage local est tout aussi simple à l’aide de la classe QStringEncoder:

QString string = "...";
auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8);
QByteArray encodedString = fromUtf16(string);

Pour lire ou écrire des fichiers texte dans différents encodages, utilisez ` QTextStream ` et sa fonction ` setEncoding()`.

Il convient de faire preuve d’une certaine prudence lors de la conversion de données par blocs, par exemple lors de leur réception via un réseau. Dans de tels cas, il est possible qu’un caractère multioctet 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.

Les fonctions ` QStringEncoder ` et ` QStringDecoder ` simplifient cette opération en gérant ce cas dans un état interne. Il suffit donc de réappeler l’encodeur ou le décodeur avec le bloc de données suivant pour que l’encodage ou le décodage se poursuive automatiquement et correctement :

auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);

QString string;
while (new_data_available() && !toUtf16.hasError()) {
    QByteArray chunk = get_new_data();
    string += toUtf16(chunk);
}
auto result = toUtf16.finalize();
if (result.error != QStringDecoder::FinalizeResult::Error::NoError) {
    // Handle error
}

L’objet QStringDecoder conserve son état d’un bloc à l’autre et fonctionne donc correctement même si un caractère multioctet est divisé entre deux blocs.

Les objets `QStringConverter` ne peuvent pas être copiés en raison de leur état interne, mais peuvent être déplacés.

Voir également QTextStream, QStringDecoder et QStringEncoder.

Documentation sur les types de membres

enum QStringConverter::Encoding

ConstanteValeurDescription
QStringConverter::Utf80Créer un convertisseur vers ou depuis l'UTF-8
QStringConverter::Utf161Créer un convertisseur vers ou depuis UTF-16. Lors du décodage, l'ordre des octets sera automatiquement détecté grâce à une marque d'ordre des octets placée en tête. Si aucune marque n'existe ou lors de l'encodage, l'ordre des octets système sera utilisé par défaut.
QStringConverter::Utf16BE3Créer un convertisseur vers ou depuis l'UTF-16 « big-endian ».
QStringConverter::Utf16LE2Créer un convertisseur vers ou depuis l'UTF-16 « little-endian ».
QStringConverter::Utf324Créer un convertisseur vers ou depuis l'UTF-32. Lors du décodage, l'ordre des octets sera automatiquement détecté grâce à une marque d'ordre des octets placée en tête. Si aucune marque n'existe ou lors de l'encodage, l'ordre des octets du système sera utilisé par défaut.
QStringConverter::Utf32BE6Créer un convertisseur vers ou depuis le format UTF-32 « big-endian ».
QStringConverter::Utf32LE5Créer un convertisseur vers ou depuis l'UTF-32 « little-endian ».
QStringConverter::Latin17Créer un convertisseur vers ou depuis l’ISO-8859-1 (Latin1).
QStringConverter::System8Créer un convertisseur vers ou depuis l’encodage sous-jacent de la locale du système d’exploitation. Celui-ci est toujours supposé être UTF-8 pour les systèmes basés sur Unix. Sous Windows, cela permet de convertir vers et depuis la page de codes de la locale.

enum class QStringConverter::FinalizeResultError

ConstanteValeurDescription
QStringConverter::FinalizeResultError::NoError0Aucune erreur.
QStringConverter::FinalizeResultError::InvalidCharacters1L'encodeur a terminé avec succès, mais a rencontré des caractères non valides soit pendant la finalisation, soit un peu plus tôt.
QStringConverter::FinalizeResultError::NotEnoughSpace2La fonction finalize() a échoué; vous devez agrandir la mémoire tampon et appeler à nouveau finalize().

enum class QStringConverter::Flag
flags QStringConverter::Flags

ConstanteValeurDescription
QStringConverter::Flag::Default0Les règles de conversion par défaut s'appliquent.
QStringConverter::Flag::ConvertInvalidToNull0x2Si cet indicateur est activé, chaque caractère d'entrée non valide est affiché sous la forme d'un caractère nul. S'il n'est pas activé, les caractères d'entrée non valides sont représentés par QChar::ReplacementCharacter si l'encodage de sortie peut représenter ce caractère, sinon par un point d'interrogation.
QStringConverter::Flag::WriteBom0x4Lors de la conversion d’un « QString » vers un encodage de sortie, un « QChar::ByteOrderMark » est écrit en tant que premier caractère si l’encodage de sortie le prend en charge. C’est le cas pour les encodages UTF-8, UTF-16 et UTF-32.
QStringConverter::Flag::ConvertInitialBom0x8Lors de la conversion d’un encodage d’entrée vers un encodage de s QString, l’ QStringDecoder ignore généralement le « byte order mark » ( QChar::ByteOrderMark) en début de chaîne. Lorsque cet indicateur est activé, le « byte order mark » n’est pas ignoré, mais converti en UTF-16 et inséré au début de l’ QString créée.
QStringConverter::Flag::Stateless0x1Ignorer les états éventuels du convertisseur entre différents appels de fonction destinés à encoder ou décoder des chaînes de caractères. Cela entraînera également le déclenchement d’une erreur par l’ QStringConverter si une séquence de données incomplète est rencontrée.

Le type Flags est un typedef pour QFlags<Flag>. Il stocke une combinaison OR de valeurs Flag.

Documentation des fonctions membres

[noexcept default] QStringConverter::QStringConverter(QStringConverter &&)

Crée par « move » une instance de ` QStringConverter`.

[noexcept protected default] QStringConverter::~QStringConverter()

Supprime l'instance de ` QStringConverter`.

[static] QStringList QStringConverter::availableCodecs()

Renvoie une liste des noms des codecs pris en charge. Les noms renvoyés par cette fonction peuvent être transmis au constructeur de ` QStringEncoder` et ` QStringDecoder` afin de créer un encodeur ou un décodeur pour le codec spécifié.

Cette fonction peut être utilisée pour obtenir une liste de codecs supplémentaires, en plus de ceux standard. La prise en charge de ces codecs supplémentaires nécessite que Qt soit compilé avec la bibliothèque ICU.

Remarque : l’ordre des codecs est un détail d’implémentation interne et sa stabilité n’est pas garantie.

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0)

Renvoie l'encodage du contenu de data s'il est possible de le déterminer. expectedFirstCharacter peut être transmis en tant qu'indication supplémentaire pour faciliter la détermination de l'encodage.

L'objet optionnel renvoyé est vide si l'encodage n'est pas clair.

[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)

Tente de déterminer l'encodage du code HTML de data en analysant les marqueurs d'ordre des octets (BOM) en début de fichier ou un spécificateur de jeu de caractères dans la balise meta HTML. Si le paramètre facultatif est vide, l'encodage spécifié n'est pas pris en charge par QStringConverter. Si aucun encodage n'est détecté, la méthode renvoie « Utf8 ».

Voir également QStringDecoder::decoderForHtml().

[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)

Convertir ` name ` en membre correspondant de ` Encoding `, s'il en existe un.

Si ` name ` n'est pas le nom d'un codec figurant dans l'énumération `Encoding`, ` std::nullopt ` est renvoyé. Un tel nom peut néanmoins être accepté par le constructeur ` QStringConverter ` lorsque Qt est compilé avec ICU, si ICU fournit un convertisseur portant ce nom.

Remarque : dans les versions de Qt antérieures à la version 6.8, cette fonction ne prenait qu’un const char *, qui était censé être encodé en UTF-8.

[noexcept] bool QStringConverter::hasError() const

Renvoie « true » si une conversion n'a pas pu convertir correctement un caractère. Cela peut par exemple se produire en cas de séquence UTF-8 non valide ou lorsqu'un caractère ne peut pas être converti en raison de limitations de l'encodage cible.

[noexcept] bool QStringConverter::isValid() const

Renvoie « true » s'il s'agit d'un convertisseur de chaînes valide pouvant être utilisé pour l'encodage ou le décodage de texte.

Les convertisseurs de chaînes créés par défaut ou ceux créés avec un nom non pris en charge ne sont pas valides.

[noexcept] const char *QStringConverter::name() const

Renvoie le nom canonique de l'encodage que cet QStringConverter est capable d'encoder ou de décoder. Renvoie un nullptr si le convertisseur n'est pas valide. Le nom renvoyé est encodé en UTF-8.

Voir également isValid().

[static noexcept] const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)

Renvoie le nom canonique de l'encodage e ou nullptr si e est une valeur non valide.

Remarque : dans les versions de Qt antérieures à 6.10, 6.9.1, 6.8.4 ou 6.5.9, l'appel de cette fonction avec un argument non valide entraînait un comportement indéfini. Depuis les versions de Qt mentionnées ci-dessus, elle renvoie à la place nullptr.

[noexcept] void QStringConverter::resetState()

Réinitialise l'état interne du convertisseur, effaçant ainsi les éventuelles erreurs ou conversions partielles.

[noexcept default] QStringConverter &QStringConverter::operator=(QStringConverter &&)

Cette opération attribue « other » à cette instance de « QStringConverter ».

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