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 :

Problème de conversion UTF 8 avec toUtf8()


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut Problème de conversion UTF 8 avec toUtf8()
    Bonjour,

    J'exécute ma compilation en standard (unicode a priori),
    dans un fichier texte j'aimerais écrire en utf-8, car ce fichier sera utilisé par un programme fonctionnant sous utf-8.
    Exemple : à la place de "°" j'aimerais écrire "\xc2\xb0" et à la place de "à" j'aimerai "\xc3\xa0" et ainsi de suite pour tout les caractères spéciaux.
    j'ai donc fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //exemple pour tester
     
    QString rr = "ref_ur°fr à";
        QFile fich("c:\\test.txt");
         fich.open(QIODevice::WriteOnly | QIODevice::Text );
     
                QTextStream tex(&fich);
                tex.setCodec("UTF-8");
                 tex << rr.toUtf8() <<endl;
                 fich.close();
    Je me retrouve avec "ref_ur°fr Ã*" comme réponse
    J'ai lu dans un autre topic que ce serait dû à Qt4, ce problème n'existant pas sous Qt3.
    Y-a-t-il une solution?
    merci par avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Si le source est en UTF-8, il faut peut-être ajouter avant l'instanciation de la string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Bonjour,
    merci pour ta réponse,
    cependant, maintenant j'ai des "?" à la place des caractères spéciaux,
    Y-a-t-il autre chose à faire?
    merci

  4. #4
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Est-ce que ton QString rr est correct ? Tu as vérifié en l'affichant (avec qDebug() par exp) ?

    Parfois le code source lui même est mal lu par QString, à toi de savoir en quel encodage est écrit ton code source et éventuellement le convertir (directement à la construction!) avec http://qt.developpez.com/doc/latest/...tml#fromlatin1 (pour du latin1) ou une des autres fonctions du même genre. Ce qui je crois peut être automatisé avec ce qu'a posté estofilo juste avant, mais si ton code source n'est pas en Utf-8 il faut appeler la fonction avec l'encodage adéquat.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    merci pour ta réponse,
    mon projet est en format "system" par défaut, je l'ai passé en "latin 1" mais cela n'a rien changé.
    je n'ai pas réussi à utiliser la fonction debug() pour vérifier, si tu pouvais me donner un exemple ce sera sympa
    j'ai essayé différentes fonctions comme

    QString::fromUtf8 ou
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")) ou
    QObject.toUtf8

    avec le même problème
    il doit y avoir un problème au niveau de ma QString de départ, faudrait que je puisse essayer QDebug()

  6. #6
    Membre confirmé
    Avatar de bobti89
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Alors soit tu passes ton code en utf-8 (plutôt qu'en latin1...) ou tu utilises QString::fromLatin1().

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    en faisant QString::fromLatin1() j'ai mon texte d'origine avec les caractères spéciaux non traduits
    je vois pas ce qui m'échappe


    édit:
    j'ai essayé en passant mon projet en utf-8 et j'ai les caractères spéciaux qui apparaissent dans le fichier , ca ne devrait pas etre possible?!

  8. #8
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Ça confirme ce que tout le monde a dit sur le sujet ici, c'est à la création de ta QString rr que l'erreur d'encodage était faite et pas au niveau de l'écriture dans le fichier. Il faut savoir que quand tu initialises un QString avec une chaîne en dur dans ton code, cette chaîne est logiquement encodée avec l'encodage de tes fichiers source, et ça Qt ne peut pas le deviner sauf avec la fonction QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ENCODAGE-DE-TES-FICHIERS-SOURCE")). En appelant cette fonction avec Utf-8 tu disais à Qt que tes fichiers sources étaient en Utf-8, logique donc qu'en passant ton projet en Utf-8 tout fonctionne bien.

    Concernant QDebug c'est très simple, avec la doc tu aurais trouvé sans problème, il suffit d'inclure <QDebug> et ensuite tu peux faire ce genre de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString test = "texte";
    QStringList liste;
    liste << "un" << "deux" << "trois";
    qDebug() << "string: " << test << " -- liste: " << liste;
    Cela permet d'afficher certains objets Qt en console.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Je vais tester QDebug merci.
    Par contre je ne sais pas si on parle de la même chose concernant le fichier de sortie, quand je disais que les caractères spéciaux étaient affichés je voulais dire qu'ils étaient écrits comme ca : "°" et "à" or moi je veux qu'ils soient écrits comme ca : "\xc2\xb0" et "\xc3\xa0". traduits à l'envers en fait. C'est peut être ce que tu essaies de me dire, auquel cas je m'y prends mal.
    merci

  10. #10
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Pardon j'avais zapé ton véritable objectif du coup. Je ne sais pas comment transformer les caractères comme tu le souhaites, mais tu veux que les codes "\xc2\xb0" soient écrits en ASCII dans ton fichier donc ? Parce que l'affichage en soi dépend du logiciel qui affiche le fichier.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    oui en effet je veux que les caractères apparaissent tel quel, en ASCII alors? ca n'a plus rien à voir a l'utf-8 du coup?
    concernant l'ouverture du fichier ce sera avec un autre programme qui prend en charge que ces caractères là. quand j'ouvre le fichier avec bloc note ce sont les caractères ASCII qui apparaissent. Ce que tu veux dire c'est que si j'écris manuellement " \xc2\xb0" dans un fichier, selon le programme qui l'ouvrira l'interprétation ne sera pas la même? en l'occurrence le fichier texte me servira de "script" et c'est le programme qui traduira l'ASCII lui même.
    Est-il possible de traduire ma qstring de départ par un tableau de référence comprenant les codes ascii?
    en tout cas merci je commence a y voir plus clair

  12. #12
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Citation Envoyé par defrouille Voir le message
    Ce que tu veux dire c'est que si j'écris manuellement " \xc2\xb0" dans un fichier, selon le programme qui l'ouvrira l'interprétation ne sera pas la même?
    Non c'est l'inverse que je veux dire, si ta chaîne est "\xc2\xb0" en ASCII tous les éditeurs le liront comme du texte normal (ASCII), par contre si tu écris ces caractères là non pas dans leur forme "visuelle" mais leur forme binaire (que je ne connais pas), là les éditeurs pourront réagir différemment. En affichant les bon caractères spéciaux, ou les mauvais s'ils se trompent d'encodage, ou encore en affichant "\xc2\xb0" s'il y a une option pour afficher les caractères spéciaux de cette manière.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    si ta chaîne est "\xc2\xb0" en ASCII tous les éditeurs le liront comme du texte normal (ASCII)
    c'est justement ca qui m'intéresse, donc il faudrait que je traduise ma chaine comprenant les caractères spéciaux, en ASCII, pour pouvoir écrire sous cette forme dans un fichier texte?
    quand je remplace utf8 par ASCII mes caractères restent "spéciaux"
    je ne dois pas avoir la bonne démarche

  14. #14
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Je ne suis pas du tout un expert en encodage. Mais il faut bien réaliser que ce qu'on voit à l'écran n'est qu'une traduction des octets lus dans le fichier, traduction dont les encodages sont les dictionnaires en quelque sorte. Que ton programme affiche "\xc2\xb0" ou "°" ou "°", c'est le même code binaire qui est dans ton fichier.

    Si j'ai bien compris ce que tu veux, il faudrait que tu traduises tes caractères spéciaux en leur code de la forme "\xc2\xb0". A ce niveau là je ne sais s'il existe quelque chose qui le fasse, personnellement je n'ai jamais vu les caractères spéciaux affichés comme ça.

    Essaye de chercher s'il existe des fonctions/libs qui permettent d'afficher les caractères spéciaux sous cette forme. Ensuite il suffirait d'injecter cet affichage dans une QString que tu enregistres dans ton fichier.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    je comprends, le caractère spécial ou sa forme que je veux, ne sont pas réellement liés par une traduction standards. Apparemment je cherche à détourner le but de ces formats. il faut donc que je cherche une fonction qui suive ma logique.
    je te remercie pour ces infos, je vais voir si je peux trouver quelque chose allant de ce sens

Discussions similaires

  1. [DisplayTag] Problème d'encoding UTF-8 avec export
    Par Fr@ncky dans le forum Taglibs
    Réponses: 19
    Dernier message: 04/06/2015, 08h48
  2. [ZF 1.10] Problème d'encodage UTF-8 avec Zend_Db Mysqli
    Par arnolem dans le forum Zend_Db
    Réponses: 1
    Dernier message: 21/04/2010, 00h12
  3. Problème de conversion utf-8 en ISO
    Par thelpi dans le forum C#
    Réponses: 7
    Dernier message: 05/08/2008, 16h00
  4. problème de conversion UTF -> iso
    Par Empty_body dans le forum Général Java
    Réponses: 15
    Dernier message: 01/08/2008, 16h57
  5. Problème de conversion avec CONVERT
    Par gowser dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/12/2005, 16h48

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