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

C++ Discussion :

Conversion string en UTF-8


Sujet :

C++

  1. #1
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut Conversion string en UTF-8
    Bonjour,

    Je cherche désespérément à convertir une chaîne de caractère passé à un programme en UTF-8, or je ne trouve pas d'outils satisfaisant

    J'ai bien tenté des choses avec "utf8_codecvt_facet" de Boost mais je n'ai pas tellement compris son fonctionnement.

    Voici un petit exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main (int argc, char **argv)
    {
          // traitement sur argv[1] pour le convertir en UTF-8
          std::cout << .... << std::endl;
     
          return 0;
    }
    Petite précision ma console est configuré pour affiché de l'UTF-8.

    Merci d'avance
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  2. #2
    screetch
    Invité(e)
    Par défaut
    quel systeme d'exploitation?

  3. #3
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Windows Seven 32 bits, en fait j'ai un fichier encodé en UTF-8 et j'ai besoin de faire des comparaisons avec les chaînes passé en paramètre de l'application et le contenu du fichier.
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  4. #4
    screetch
    Invité(e)
    Par défaut
    je pense qu'il faut utiliser wcout (wide-cout, pour obtenir des wstring) et utiliser WideCharToMultiByte (http://msdn.microsoft.com/en-us/library/aa450989.aspx) en utilisant UTF8 en premier argument

  5. #5
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Ok mais je préfère rester en C++ standard et pas pour l'API Windows, car ce programme a aussi pour vocation à être utilisé sur Linux.

    Une autre idée ?

    Sinon je pense que je vais me rabattre sur Qt si il n'y a pas de solution en standard ou avec boost.
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  6. #6
    screetch
    Invité(e)
    Par défaut
    dans ce cas c'est libiconv mais la version win32 je ne sais plus ou la trouver. mais elle existe (et pas que la version cygwin)

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Moi j'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        std::locale loc( "french");
        std::use_facet <std::ctype <wchar_t> > ( loc).widen( & my_string[0], & my_string[size()], & my_wstring[0]);
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Citation Envoyé par screetch Voir le message
    dans ce cas c'est libiconv mais la version win32 je ne sais plus ou la trouver. mais elle existe (et pas que la version cygwin)
    J'ai déjà pensé aussi à iconv, mais le problème est que je ne sais pas quel est l'encodage de la chaîne passé en paramètre et pour utilisé iconv il faut le connaître.

    Citation Envoyé par dragonjoker59 Voir le message
    Moi j'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        std::locale loc( "french");
        std::use_facet <std::ctype <wchar_t> > ( loc).widen(  & my_string[0], & my_string[size()], & my_wstring[0]);
    Ne marche pas, (enfin chez moi), quand je compile ce bout de programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main (int argc, char** argv) {
        std::cout << argv[1] << std::endl;
        std::string tmp (argv[1]);
        std::locale loc( "french");
        std::use_facet <std::ctype <wchar_t> > (loc).widen(&tmp[0], &tmp[tmp.size()], &tmp[0]);
        std::cout << tmp << std::endl;
     
         return 0;
    }
    Déjà cela ne compile pas et me dit :

    error: no matching function for call to 'std::ctype<wchar_t>::widen(char*, char*, char*) const'
    Ensuite en ne gardant que l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::locale loc( "french");
    J'ai droit à une très belle exception venant de la lib C++ me disant que le nom de cette locale n'existe pas, j'ai donc fouillé un peu et j'ai vu qu'il n'y a que 3 paramètre possible pour le type de locale qui sont :


    • ""
    • C
    • POSIX

    Voila, j'espère avoir été clair dans ce qui ne marchait pas Mais merci en tout cas
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par snake264 Voir le message
    Ensuite en ne gardant que l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::locale loc( "french");
    J'ai droit à une très belle exception venant de la lib C++ me disant que le nom de cette locale n'existe pas, j'ai donc fouillé un peu et j'ai vu qu'il n'y a que 3 paramètre possible pour le type de locale qui sont :


    • ""
    • C
    • POSIX
    La liste des locales disponible dépend en fait du compilateur, ce n'est pas portable. Par exemple, sous windows avec visual C++, la chaîne "French_France" est acceptée.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    A ok, je ne le savais pas, je ne prendrais donc pas cette solution... Je vais voir avec iconv si j'arrive à trouver l'encodage de ma chaîne que je cherche à traduire

    Ou sinon je vais me rabattre sur Qt, tant pis.
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  11. #11
    screetch
    Invité(e)
    Par défaut
    glib a des fonctions pour récupérer l'encodage courant. Et c'est assez horrible. Il n'y a pas de solution vraiment portable apparemment a part un framework comme Gtk+ ou Qt

  12. #12
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Il y a boost.locale qui est proposée dans boost et qui visiblement pourrait résoudre ton problème.

    Beaucoup plus léger (et facile a intégrer) : UTF8CPP que j'ai déjà utilisé avec succès. Par contre vu la légèreté du code, je ne sais pas si ça règle "tous" les cas de conversion.

    A mon avis, tu chopes UTF8CPP, tu utilises une fonction de conversion, et hop c'est réglé.

  13. #13
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    C'est bon j'ai résolu mon problème en utilisant Qt, c'est bourrin mais bon je pense que c'est malgré tout la meilleur solution au lieu de mélangé des tas de librairies autant en utiliser qu'une et profiter de tout ce qu'elle peut offrir

    Merci à vous
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  14. #14
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ben si tu utilises Qt dés le départ pour d'autres choses, oui, mieu vaut chercher là en premier...

    Si tu utilises Qt juste pour ça par contre...

  15. #15
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Justement je faisais tout avec la STL pour le moment...

    Donc maintenant comme j'utilise Qt je vais tout traduire en Qt de cette manière je ne l'utiliserai pas que l'encodage mais bonjour le boulot
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  16. #16
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    ...


    Donc ça serait pas plus simple de garder ton algo STL et ajouter UTF8CPP?

    Qt c'est quand même tout un environnement hein...

  17. #17
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Cette bibliothèque ne me permet pas de faire ce que j'attends.

    Et pour Qt il faut juste que je remplace certains types et méthodes de la STL par ceux de Qt ça demande tout au plus une petite demi journée de boulot ensuite revérifier que mes TU fonctionnent et ça sera bon

    Et puis ça fait casiment 1 an que j'ai pas retouché à Qt ça me fait une bonne raison pour m'y remettre
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    pourquoi tu ne veux pas garder ton code utilisant la STL?

    en fait moi j'ai fait le contraire de toi, j'utilisais beaucoup Qt meme dans mon backend... jusqu'a cette annonce de Nokia qui m'a fait d'un coup repenser que le backend devrait etre le plus independant possible d'un framework.
    Je suis donc en train de remplacer mes QVector et mes QStringList par std::vector and std::vector<std::string>

  19. #19
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Tout simplement parce que la STL ne permet pas de faire ce que je souhaite
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    tu aurais un exemple?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [Encodage utf-8]conversion d'un String en utf-8
    Par noOneIsInnocent dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2007, 15h19
  2. [Conversion] String en InputStream
    Par canou94 dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2005, 15h04
  3. [CONVERSION] String -> HEXADECIMAL ...
    Par tripop dans le forum Langage
    Réponses: 9
    Dernier message: 13/01/2005, 09h42
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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