Sur cette page

QStringDecoder Class

La classe `QStringDecoder` fournit un décodeur de texte basé sur les états. En savoir plus...

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

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

Types publics

Fonctions publiques

QStringDecoder()
QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)
QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)
QChar *appendToBuffer(QChar *out, QByteArrayView in)
(since 6.6) char16_t *appendToBuffer(char16_t *out, QByteArrayView in)
QStringDecoder::EncodedData<QByteArrayView> decode(QByteArrayView ba)
QStringDecoder::EncodedData<const QByteArray &> decode(const QByteArray &ba)
(since 6.11) QStringDecoder::FinalizeResult finalize()
(since 6.11) QStringDecoder::FinalizeResultQChar finalize(QChar *out, qsizetype maxlen)
(since 6.11) QStringDecoder::FinalizeResult finalize(char16_t *out, qsizetype maxlen)
qsizetype requiredSpace(qsizetype inputLength) const
QStringDecoder::EncodedData<QByteArrayView> operator()(QByteArrayView ba)
QStringDecoder::EncodedData<const QByteArray &> operator()(const QByteArray &ba)

Membres publics statiques

QStringDecoder decoderForHtml(QByteArrayView data)

Description détaillée

Un décodeur de texte convertit un texte au format codé utilisant un encodage spécifique en représentation interne de Qt.

La conversion de données codées en une « QString » peut être effectuée à l'aide du code suivant :

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

Le décodeur mémorise tout état nécessaire entre deux appels ; ainsi, la conversion de données reçues par blocs, par exemple lors d’une réception sur un réseau, est tout aussi simple : il suffit d’appeler le décodeur dès que de nouvelles données sont disponibles :

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 blocs et fonctionne donc correctement même si les blocs sont fractionnés au milieu d'une séquence de caractères multi-octets.

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

Voir également QStringConverter et QStringEncoder.

Documentation sur les types de membres

[alias] QStringDecoder::FinalizeResult

Il s'agit d'un alias pour QStringConverter::FinalizeResultChar<char16_t>.

[alias] QStringDecoder::FinalizeResultQChar

Il s'agit d'un alias pour QStringConverter::FinalizeResultChar<QChar>.

Documentation des fonctions membres

[constexpr noexcept] QStringDecoder::QStringDecoder()

La valeur par défaut crée un décodeur. Le décodeur par défaut n'est pas valide et ne peut pas être utilisé pour convertir du texte.

[explicit] QStringDecoder::QStringDecoder(QAnyStringView name, QStringConverter::Flags flags = Flag::Default)

Crée un objet décodeur à l’aide de name et flags. Si name n’est pas le nom d’un encodage connu, un convertisseur non valide sera créé.

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.

Voir également isValid().

[explicit constexpr] QStringDecoder::QStringDecoder(QStringConverter::Encoding encoding, QStringConverter::Flags flags = Flag::Default)

Crée un objet décodeur à l'aide de encoding et flags.

QChar *QStringDecoder::appendToBuffer(QChar *out, QByteArrayView in)

Décode la séquence d'octets traitée par in et écrit le résultat du décodage dans le tampon à partir de l'adresse out. Renvoie un pointeur vers la fin des données écrites.

out doit être suffisamment grand pour pouvoir contenir toutes les données décodées. Utilisez requiredSpace pour déterminer la taille maximale requise pour décoder un tampon de données codées de in.size() octets. Cette fonction peut écrire dans n'importe quel octet compris entre out et out + requiredSpace(), y compris ceux situés au-delà du pointeur de fin renvoyé.

Voir également requiredSpace.

[since 6.6] char16_t *QStringDecoder::appendToBuffer(char16_t *out, QByteArrayView in)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.6.

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::decode(QByteArrayView ba)

QStringDecoder::EncodedData<QByteArrayView> QStringDecoder::operator()(QByteArrayView ba)

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::decode(const QByteArray &ba)

QStringDecoder::EncodedData<const QByteArray &> QStringDecoder::operator()(const QByteArray &ba)

Convertit ` ba ` et renvoie une structure implicitement convertible en ` QString`.

QByteArray encodedString = "...";
auto toUtf16 = QStringDecoder(QStringDecoder::Utf8);
auto data = toUtf16(encodedString); // data's type is QStringDecoder::EncodedData<const QByteArray &>
QString string = toUtf16(encodedString); // Implicit conversion to QString

// Here you have to cast "data" to QString
auto func = [&]() { return !toUtf16.hasError() ? QString(data) : u"foo"_s; };

[static] QStringDecoder QStringDecoder::decoderForHtml(QByteArrayView data)

Tente de déterminer l'encodage du code HTML de data en analysant les marqueurs d'ordre des octets (BOM) ou un spécificateur de jeu de caractères dans la balise meta HTML, puis renvoie un décodeur ( QStringDecoder ) correspondant à cet encodage. Si le décodeur renvoyé n'est pas valide, cela signifie que l'encodage spécifié n'est pas pris en charge par QStringConverter. Si aucun encodage n'est détecté, la méthode renvoie un décodeur pour Utf8.

Voir également isValid().

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize()

[since 6.11] QStringDecoder::FinalizeResultQChar QStringDecoder::finalize(QChar *out, qsizetype maxlen)

[since 6.11] QStringDecoder::FinalizeResult QStringDecoder::finalize(char16_t *out, qsizetype maxlen)

Indique au décodeur qu'aucune autre donnée ne sera transmise.

Peut également fournir des données provenant du contenu résiduel en attente de décodage. Lorsqu’il n’y a pas de données résiduelles à prendre en compte, le champ « error » de la réponse sera défini sur « NoError ».

Si « out » est fourni et n’est pas nul, il doit comporter un espace pouvant contenir jusqu’à maxlen caractères. Un nombre maximal de caractères de sortie résiduelle correspondant à cette valeur est écrit dans cet espace, la fin étant indiquée par le champ « next » de la valeur de retour. En règle générale, ces données résiduelles consistent en un caractère de remplacement par caractère d’entrée restant non converti.

Si tout le contenu résiduel a été fourni via ` out`, si ` out ` est ` nullptr`, ou s’il n’y a pas de données résiduelles, le décodeur est réinitialisé au retour de la fonction ` finalize()`. Sinon, les données restantes peuvent être récupérées ou ignorées par un nouvel appel à la fonction ` finalize()`.

Ces fonctions ont été introduites dans Qt 6.11.

Voir également hasError() et appendToBuffer().

qsizetype QStringDecoder::requiredSpace(qsizetype inputLength) const

Renvoie le nombre maximal d'unités de code UTF-16 nécessaires pour traiter des données encodées en inputLength.

Voir également appendToBuffer.

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