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 :

[C++] string en unicode ou ansi


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    dug
    dug est d�connect�
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Par d�faut [C++] string en unicode ou ansi
    Bonjour,

    je vais surement poser des questions b�tes, mais bon, �a arrive � tout le monde

    j'ai un peu de mal de me d�patouiller entre UNICODE et ANSI.

    il n'y a pas un type de donn�e string qui g�re l'unicode et ansi les doigts dans le nez ?

    std:string ne g�re que l'ANSI ?
    si oui, pourquoi il utilise le template _CharT dans leurs fonctions
    si non, pourquoi a �t� fait std:wstring ...

    et pour wxString, il g�re les deux format non ?
    donc on a plus besoin de la macro _T() ?

    bref, un peu embrouill� dans ma t�te...

  2. #2
    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
    j'ai un peu de mal de me d�patouiller entre UNICODE et ANSI.
    D�j�, ce sont des concepts propres � Windows.
    (Il y aussi OEM).

    il n'y a pas un type de donn�e string qui g�re l'unicode et ansi les doigts dans le nez ?
    Pas en standard.
    Apr�s y'en a dans d'autres biblioth�ques oui. (glibmm, ICU...)

    std:string ne g�re que l'ANSI ?
    std::string n'a aucune notion de "ANSI".
    C'est une s�quence de char.
    Les caract�res que peut repr�senter un char d�pendent de la locale syst�me.

    si oui, pourquoi il utilise le template _CharT dans leurs fonctions
    si non, pourquoi a �t� fait std:wstring ...
    std::wstring est une s�quence de wchar_t.
    Pareil, ce qu'est wchar_t d�pend de la locale syst�me. Sauf qu'en plus, la taille d�pend aussi du syst�me (ce qui n'est pas le cas de char).

    et pour wxString, il g�re les deux format non ?
    donc on a plus besoin de la macro _T() ?
    wxwidgets �tant multi-plateforme, je ne suis pas certain qu'il applique ce genre de techniques windowsiennes.

    bref, un peu embrouill� dans ma t�te...
    Le standard ne fait aucune garantie sur rien du tout.
    L'id�al serait d'avoir du support d'unicode en standard. Un papier r�cent propose l'ajout de cha�nes litt�rales en utf-8.
    Moi je fais un truc du genre utf8_l("machin truc") pour distinguer les cha�nes litt�rales dans le charset local des cha�nes litt�rales en utf-8.

  3. #3
    dug
    dug est d�connect�
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Par d�faut
    merci de ta r�ponse !

    Apr�s avoir regard� sur ce site, je comprends un peu mieux ce que tu dis

    je compte faire une appli multi-langue (pour la premi�re fois), avec wxWidget.
    Il y a des objets ou librairie externe pour g�rer ces probl�matiques ?

  4. #4
    Membre �m�rite

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    La classe wxString se comporte comme std::string si wxUSE_UNICODE n'est pas d�fini, ou comme std::wstring sinon.

    Pour une application multi-langues avec wxWidgets :
    - utilise wxString le plus possible
    - utilise wxT("...") pour les chaines constantes ne n�cessitant pas de localisation
    - utilise _("...") pour les chaines n�cessitant une localisation

    La macro _() va chercher dans le catalogue courant la traduction de la chaine pass�e en param�tre. Il suffit donc ensuite de cr�er un catalogue par langue, avec poEdit par exemple.

  5. #5
    dug
    dug est d�connect�
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Par d�faut
    merci de ta r�ponse Sylvain

    si quelqu'un � sous la main un ptit exemple pour cr�er un catalogue avec wx, je suis preneur

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Citation Envoy� par dug
    std:string ne g�re que l'ANSI ?
    si oui, pourquoi il utilise le template _CharT dans leurs fonctions
    si non, pourquoi a �t� fait std:wstring ...
    Si tu regardes de pr�s, tu verras que std::string et std::wstring ne sont que deux instances d'un m�me template: std::basic_string<>.
    Tu peux m�me te faire une std::basic_string<TCHAR> si tu en as envie...
    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.

  7. #7
    dug
    dug est d�connect�
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Par d�faut
    Merci de la pr�cision M�dinoc

    je n'ai pas encore fouiller les d�clarations des std, mais y a surement plein de chose interessante � d�couvrir

    je suis pass� de la programmation sous dos il y a pas mal d'ann�e, au mfc, cbuilder ... � zappant les std dans l'histoire, un comble

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Les CStringT des MFC >= 7 sont pas mal non plus. Elles ont un constructeur pour Ansi et pour Unicode, elles peuvent elles-m�mes �tre Ansi ou Unicode, font du Copy-On-Write, peuvent passer dans un printf() car leur repr�sentation interne est juste un pointeur sur la cha�ne stock�e...
    Tr�s sympa, les CStringT...
    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.

  9. #9
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 300
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par d�faut
    Et si l'on souhaite convertir un WCHAR* en std::string. Savez-vous quelles solutions existent? Je ne trouve pas grand chose de pr�cis � ce sujet :s

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Pour moi, les deux solutions principales sont:
    • En MFC, passer par une CStringA
    • En C++ standard, passer par un ostringstream (pas w) et lui injecter le wchar_t *.

    Il existe une troisi�me solution en C++ standard, avec une fonction membre narrow() dissimul�e quelque part (peut-�tre bien vers string ou char_traits, ou l'�quivalent C++ de locale)
    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.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. String et Unicode
    Par prgasp77 dans le forum Caml
    R�ponses: 2
    Dernier message: 30/09/2009, 07h21
  2. [Delphi 2009] TStringField Unicode ou Ansi ?
    Par dergen dans le forum Composants VCL
    R�ponses: 0
    Dernier message: 10/04/2009, 18h53
  3. Unicode et Ansi
    Par slam666 dans le forum VB.NET
    R�ponses: 2
    Dernier message: 16/11/2008, 22h40
  4. Transformer une String en Unicode
    Par annemarie dans le forum Delphi
    R�ponses: 3
    Dernier message: 28/02/2007, 17h43
  5. Convertir un fichier unicode en ansi?
    Par Faiche dans le forum C++
    R�ponses: 7
    Dernier message: 06/10/2006, 08h15

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