IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Conversion QString -> QByteArray (encodage)


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut Conversion QString -> QByteArray (encodage)
    Bonjour,

    J'ai un problème de conversion. Je dois localiser le dossier AppData sur XP. Pour cela je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", QSettings::NativeFormat);
     
    ui.textEdit->append(settings.value("Local AppData").toString());
    Cela m'affiche
    C:\Users\ウウウ\AppData\Local

    Vous le voyez, je dois lire un nom d'utilisateur en japonais. Ensuite je dois convertir ce QString en QByteArray. Je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui.textEdit->append(settings.value("Local AppData").toString().toUtf8());
    Cependant la conversion me donne (je lis sur le textEdit):

    C:\Users\ウウウ\AppData\Local

    Une idée pourquoi?

    J'ai également essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QByteArray encodedString = settings.value("Local AppData").toByteArray();
    QTextCodec *codec=QTextCodec::codecForName("UTF-8");
    QString string = codec->toUnicode(encodedString);
    ui.textEdit->append(string);
    mais pareil.
    C:\Users\ウウウ\AppData\Local

    Merci d'avance si vous avez une quelconque idée.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut,

    QTextEdit::append() prend un QString en argument. Hors toi tu lui passe un QByteArray utf-8 quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui.textEdit->append(settings.value("Local AppData").toString().toUtf8());
    La doc nous dit
    QString::QString ( const QByteArray & ba )

    Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromAscii(). Stops copying at the first 0 character, otherwise copies the entire byte array.

    You can disable this constructor by defining QT_NO_CAST_FROM_ASCII when you compile your applications. This can be useful if you want to ensure that all user-visible strings go through QObject::tr(), for example.
    Donc si tu veux recreer un QString à partir de ton QByteArray, je pense qu'il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString::fromUtf8(myQByteArray.data(), myQByteArray.size());
    Enfin, je n'ai pas essayé, je m'appuie sur juste la doc et mon intuition .

    G.

    Edit : Bien sûr, il faut que ton tableau soit correctement encodé avant. Pour cela le QVariant.toString.toUtf8 me paraît bien.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    Merci beaucoup pour ta réponse Gulish,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QByteArray encodedString2 = settings.value("Local AppData").toString().toUtf8();
    ui.textEdit->append(QString::fromUtf8(encodedString2.data(),encodedString2.size()));
    affiche correctement

    C:\Users\ウウウ\AppData\Local

    Merci encore !

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Pourquoi passer par un QByteArray ?
    Le code suivant marchera aussi bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui.textEdit->append(settings.value("Local AppData").toString());

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Citation Envoyé par Sylvain Togni Voir le message
    Pourquoi passer par un QByteArray ?
    Le code suivant marchera aussi bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui.textEdit->append(settings.value("Local AppData").toString());
    Oui, bien sûr, mais il a écrit
    Ensuite je dois convertir ce QString en QByteArray.
    C'est surement pour le mettre dans une I/O quelconque. Je pense qu'il se servait du TextEdit juste pour déboguer

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème QString et QByteArray
    Par tiagocerqueira dans le forum Qt
    Réponses: 0
    Dernier message: 02/02/2010, 18h07
  2. Conversion Qstring en type utilisateur
    Par L-F-an dans le forum Qt
    Réponses: 2
    Dernier message: 16/12/2009, 14h49
  3. Conversion Hexa et QByteArray
    Par sardik dans le forum Qt
    Réponses: 6
    Dernier message: 19/05/2009, 10h48
  4. Conversion QString en LPCTSTR
    Par crinos972 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/12/2008, 15h42
  5. Conversion QString en char*
    Par Stage2006 dans le forum Qt
    Réponses: 5
    Dernier message: 12/06/2007, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo