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 confirm�

    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 : 38
    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
    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

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

  3. #3
    Expert confirm�

    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 : 38
    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
    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.

  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 confirm�

    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 : 38
    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
    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.

  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 confirm�

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    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 confirm�

    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 : 38
    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
    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

  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 : 51
    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
    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 confirm�

    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 : 38
    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
    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.

  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
    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 confirm�

    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 : 38
    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
    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

  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
    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 confirm�

    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 : 38
    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
    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

  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
    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 confirm�

    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 : 38
    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
    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

  18. #18
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    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 confirm�

    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 : 38
    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
    Par d�faut
    Tout simplement parce que la STL ne permet pas de faire ce que je souhaite

  20. #20
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    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