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 ASCII Unicode


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut conversion ASCII Unicode
    Salut à tous.
    Comment fait-on pour convertir un string en wstring (ou un char* en wchar_t*) et inversément? Quitte à perdre des informations si c'est unicode vers ASCII.
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Quelqu'un avait donné ce code (je ne retrouve plus le post ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <string>
    #include <locale>
     
    std::string narrow(const std::wstring& ws)
    {
        std::string res(ws);
        std::locale loc("english");
        std::use_facet< std::ctype<wchar_t> >(loc).narrow(&ws[0], &ws[ws.length()], '?', &res[0]);
     
        return res;
    }
     
    std::wstring widen(const std::string& s)
    {
        std::wstring res(s);
        std::locale loc("english");
        std::use_facet< std::ctype<wchar_t> >(loc).widen(&s[0], &s[s.length()], &res[0]);
     
        return res;
    }

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Ok, merci.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si c'est juste de l'ASCII il suffit de copier les données.
    Après si tu dis ASCII alors que c'est pas de l'ASCII mais un truc genre ISO-8859-1 c'est autre chose, bien entendu.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Sauf que tu as choisi pile le mauvais exemple, car pour l'ISO-8859-1, il suffit de recopier aussi (en non-signé, car l'octet fort doit être nul).

    En effet, les 256 premiers caractères unicode sont ceux de l'ISO-8859-1...
    Citation Envoyé par [url=http://en.wikipedia.org/wiki/Basic_multilingual_plane]Wikipédia[/url]
    As of Unicode 4.1, The BMP includes the following scripts:
    • Basic Latin (0000–007F)
    • Latin-1 Supplement (0080–00FF)
    Enfin bien sûr, seules les vraies fonctions de conversion sont à utiliser (je viens de décrouvrir narrow/widen, mais on peut aussi utiliser les streams (mais j'ignore quelle locale est prise en compte)).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Bon, pour clarifier: je parlais des classes "string" et "wstring". Et ce quelque puissent être leurs formats d'encodage respectifs, quelle que soit la plateforme.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Ben comme on l'a dit, tu peux utiliser soit widen() et narrow(), soit les stringstreams...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Quelqu'un avait donné ce code (je ne retrouve plus le post ) :
    Ha oui, j'avais poster ces fonctions il y a quelques temps...
    Est-il envisageable des les ajouter dans la FAQ ? C'est assez recurent comme question je trouve

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par superspag
    Est-il envisageable des les ajouter dans la FAQ ? C'est assez recurent comme question je trouve
    C'est déjà depuis un bout de temps dans la pile de questions à ajouter pour la prochaine MAJ

Discussions similaires

  1. Conversion de chaine ASCII->Unicode
    Par zzorglub dans le forum C
    Réponses: 6
    Dernier message: 04/04/2007, 13h35
  2. [C#] Conversion ASCII ou UNICODE
    Par duky02 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/07/2006, 21h07
  3. Conversion Texte ASCII -> Unicode
    Par lesouriciergris dans le forum C++
    Réponses: 6
    Dernier message: 26/04/2006, 20h43
  4. [debutant] Conversion ASCII
    Par septox dans le forum Débuter
    Réponses: 1
    Dernier message: 28/02/2005, 09h45
  5. conversion : (Ascii en hexa) => nombre
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2004, 14h44

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