QStringConverter Class
La classe QStringConverter fournit une classe de base pour l'encodage et le décodage du texte. Plus d'informations...
| En-tête : | #include <QStringConverter> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Héritée de : |
- Liste de tous les membres, y compris les membres hérités
- QStringConverter fait partie des classes pour les données de type chaîne de caractères.
Note : 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
| bool | hasError() const |
| bool | isValid() const |
| const char * | name() const |
| void | resetState() |
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) |
Description détaillée
Qt utilise UTF-16 pour stocker, dessiner et manipuler les chaînes de caractères. Dans de nombreuses situations, vous pouvez souhaiter traiter des données qui utilisent 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 aident à la conversion entre différents encodages de texte. QStringDecoder peut décoder une chaîne à partir d'une représentation encodée en UTF-16, le format utilisé en interne par Qt Help. 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) dans 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 du système
QStringConverter peut prendre en charge d'autres codecs en fonction de la façon dont Qt a été compilé. Si d'autres codecs sont supportés, ils peuvent être listés en utilisant availableCodecs().
QStringConverters peut être utilisé comme suit pour convertir une chaîne encodée vers et depuis l'UTF-16.
Supposons que vous ayez une chaîne codée en UTF-8 et que vous souhaitiez la convertir en QString. La façon la plus simple de le faire est d'utiliser QStringDecoder comme ceci :
QByteArray encodedString = "..."; auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); QString string = toUtf16(encodedString);
Ensuite, string contient le texte sous forme décodée. La conversion d'une chaîne de caractères d'Unicode à 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 d'être prudent 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.
QStringEncoder et QStringDecoder facilitent ce problème en le consignant dans un état interne. Il suffit donc d'appeler à nouveau l'encodeur ou le décodeur avec le prochain bloc de données pour que l'encodage ou le décodage des données 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 l'état entre les morceaux et fonctionne donc correctement même si un caractère de plusieurs octets est divisé entre les morceaux.
Les objets QStringConverter ne peuvent pas être copiés en raison de leur état interne, mais ils peuvent être déplacés.
Voir aussi QTextStream, QStringDecoder, et QStringEncoder.
Documentation sur les types de membres
enum QStringConverter::Encoding
| Constante | Valeur | Description de l'application |
|---|---|---|
QStringConverter::Utf8 | 0 | Créer un convertisseur vers ou depuis UTF-8 |
QStringConverter::Utf16 | 1 | Créer un convertisseur vers ou depuis l'UTF-16. Lors du décodage, l'ordre des octets sera automatiquement détecté par une marque d'ordre des octets. S'il n'y en a pas ou lors de l'encodage, l'ordre des octets du système sera pris en compte. |
QStringConverter::Utf16BE | 3 | Créer un convertisseur vers ou depuis l'UTF-16 big-endian. |
QStringConverter::Utf16LE | 2 | Créer un convertisseur vers ou depuis l'UTF-16 little-endian. |
QStringConverter::Utf32 | 4 | Créer un convertisseur vers ou depuis l'UTF-32. Lors du décodage, l'ordre des octets sera automatiquement détecté par une marque d'ordre des octets. S'il n'y en a pas ou lors de l'encodage, l'ordre des octets du système sera pris en compte. |
QStringConverter::Utf32BE | 6 | Créer un convertisseur vers ou depuis l'UTF-32 big-endian. |
QStringConverter::Utf32LE | 5 | Créer un convertisseur vers ou depuis l'UTF-32 little-endian. |
QStringConverter::Latin1 | 7 | Créer un convertisseur vers ou depuis ISO-8859-1 (Latin1). |
QStringConverter::System | 8 | Créer un convertisseur vers ou à partir de l'encodage sous-jacent de la locale du système d'exploitation. On suppose toujours qu'il s'agit d'UTF-8 pour les systèmes basés sur Unix. Sous Windows, ce convertisseur convertit vers et à partir de la page de code de la locale. |
enum class QStringConverter::FinalizeResultError
| Constante | Valeur | Description de l'erreur |
|---|---|---|
QStringConverter::FinalizeResultError::NoError | 0 | Pas d'erreur. |
QStringConverter::FinalizeResultError::InvalidCharacters | 1 | L'encodeur a réussi à finaliser, mais a rencontré des caractères invalides soit pendant la finalisation, soit un peu plus tôt. |
QStringConverter::FinalizeResultError::NotEnoughSpace | 2 | Si QStringConverter::Flag n' a pas réussi, vous devez agrandir le tampon et appeler à nouveau QStringConverter(). |
enum class QStringConverter::Flag
flags QStringConverter::Flags
| Constante | Valeur | Description |
|---|---|---|
QStringConverter::Flag::Default | 0 | Les règles de conversion par défaut s'appliquent. |
QStringConverter::Flag::ConvertInvalidToNull | 0x2 | Si ce drapeau est activé, chaque caractère d'entrée invalide est restitué 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::WriteBom | 0x4 | Lors de la conversion d'un QString vers un encodage de sortie, écrivez un QChar::ByteOrderMark comme 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::ConvertInitialBom | 0x8 | Lors de la conversion d'un encodage d'entrée vers un QString, le QStringDecoder saute généralement un QChar::ByteOrderMark de tête. Lorsque ce drapeau est activé, la marque d'ordre des octets n'est pas ignorée, mais convertie en utf-16 et insérée au début du code créé QString. |
QStringConverter::Flag::Stateless | 0x1 | Ignorer les états possibles du convertisseur entre les différents appels de fonction pour encoder ou décoder les chaînes. Cela permettra également à QStringConverter de soulever une erreur si une séquence incomplète de données est rencontrée. |
Le type Flags est un typedef pour QFlags<Flag>. Il stocke une combinaison OU de valeurs de drapeaux.
Documentation des fonctions membres
[static] QStringList QStringConverter::availableCodecs()
Renvoie une liste de noms de codecs pris en charge. Les noms renvoyés par cette fonction peuvent être transmis aux constructeurs de QStringEncoder et QStringDecoder pour créer un en- ou un décodeur pour le codec donné.
Cette fonction peut être utilisée pour obtenir une liste de codecs supplémentaires en plus des codecs standard. La prise en charge de codecs supplémentaires nécessite que Qt soit compilé avec la prise en charge de la bibliothèque ICU.
Note : 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 peut être déterminé. expectedFirstCharacter peut être transmis en tant qu'indice supplémentaire pour aider à déterminer l'encodage.
L'option renvoyée est vide si l'encodage n'est pas clair.
[static] std::optional<QStringConverter::Encoding> QStringConverter::encodingForHtml(QByteArrayView data)
Essaie de déterminer le codage du HTML dans data en examinant les marques d'ordre des octets ou un spécificateur de jeu de caractères dans la balise HTML meta. Si l'option est vide, le codage spécifié n'est pas pris en charge par QStringConverter. Si aucun encodage n'est détecté, la méthode renvoie Utf8.
Voir aussi QStringDecoder::decoderForHtml().
[static noexcept] std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(QAnyStringView name)
Convertit name en membre Encoding correspondant, s'il y en a un.
Si name n'est pas le nom d'un codec répertorié dans l'énumération Encoding, std::nullopt est renvoyé. Un tel nom peut néanmoins être accepté par le constructeur QStringConverter lorsque Qt est construit avec ICU, si ICU fournit un convertisseur avec le nom donné.
Note : Dans les versions de Qt antérieures à la 6.8, cette fonction ne prenait qu'un const char *, qui était censé être encodé en UTF-8.
[noexcept] bool QStringConverter::hasError() const
Retourne true si une conversion n'a pas pu convertir correctement un caractère. Cela peut par exemple être déclenché par une séquence UTF-8 invalide ou lorsqu'un caractère ne peut pas être converti en raison de limitations dans l'encodage cible.
[noexcept] bool QStringConverter::isValid() const
Retourne true s'il s'agit d'un convertisseur de chaîne valide qui peut être utilisé pour encoder ou décoder du texte.
Les convertisseurs de chaînes construits par défaut ou les convertisseurs construits avec un nom non supporté ne sont pas valides.
[noexcept] const char *QStringConverter::name() const
Renvoie le nom canonique de l'encodage que cette QStringConverter peut encoder ou décoder. Retourne un nullptr si le convertisseur n'est pas valide. Le nom retourné est encodé en UTF-8.
Voir aussi 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 invalide.
Note : Dans les versions de Qt antérieures à 6.10, 6.9.1, 6.8.4 ou 6.5.9, l'appel à cette fonction avec un argument invalide entraînait un comportement indéfini. Depuis les versions de Qt mentionnées ci-dessus, elle renvoie nullptr à la place.
[noexcept] void QStringConverter::resetState()
Réinitialise l'état interne du convertisseur, en éliminant les erreurs potentielles ou les conversions partielles.
© 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.