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 :

Affichage caractères unicodes dans la console


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut Affichage caractères unicodes dans la console
    Salut, je cherche à afficher trois caractères dans ma console: '˄', '˅', et '¬', donc des opérateurs mathématiques. Pour '¬', il me suffit de faire un char (0x170) dans mes cout, car ce caractère est présent dans le code ascii. Mais comment puis-je faire pour les deux autres??? Le code ascii correspondant d'apres le standard unicode est respectivement 0x2227 et 0x2228, mais ces valeurs ne sont pas compries telles quelles.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sous Windows, tu peux essayer WriteConsoleW() ou CharToOem().

    Sinon, sous (normalement) tous les OS, tu peux essayer putwc(0x2227)

    PS: ASCII <==> 0 < code < 128
    Ce n'est donc pas "le code ascii", mais des codes Unicode.
    Edit: d'ailleurs, je me demande pourquoi le premier marche s'il est en 0x170. Es-tu sûr qu'il n'est pas en 170 (0xAA) tout court ?
    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.

  3. #3
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Bonojur,
    Merci pour ta réponse.
    D'après ce que j'ai vu, putwc est utilisé pour mettre un caractère dans un fichier, et writeconsolew est utilisé pour afficher directement un caractère à l'écran. Ca pourrait me convenir (bine que j'ai du mal à l'utiliser), mais je cherche à manipuler ces caractères dans des strings, donc le problème se poserait encore après.
    Il semblerait qu'il soit possible de changer le code de la page. Je testerais bien cette solution, mais je n'arrive pas à déterminer le codepage correspondant.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    putwc() écrit dans un flux C, qui peut très bien être stdout.

    En C++, tu peux utiliser des std::wstring et des wchar_t si tu veux programmer en unicode. Par contre, évite les flux standard en unicode (wcout etc.), car ils ne marchent pas partout (sous MinGW, par exemple, ça foire).
    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.

  5. #5
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    D'après la msdn de mon visual studio 2005:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int putc(
       int c,
       FILE *stream 
    );
    wint_t putwc(
       wchar_t c,
       FILE *stream 
    );
    Donc soit je ne regarde pas la bonne doc, soit je ne comprend pas....

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Qu'est-ce que tu ne comprends pas ?
    Tu ne connais pas les flux C (FILE *) ?
    (ce qui serait normal, si tu n'as appris que le C++)
    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
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    bah il me semblait que les flux de type FILE étaient utilisés pour écrire dans les fichiers.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les trois flux standard (stdin, stdout, stderr) écrivent/lisent par défaut sur la console ou le terminal, et sont de type FILE *.
    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
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    d'accord donc si je comprend bien:
    la fonction putwc permet de mettre un caractère dans un flux FILE*, mais comment récupère t'on ce flux après? Je pensais faire ca mais ca ne marche manifestement pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	FILE* stream;
    	char str = "˄";
    	stream = stdout;
    	putwc(str,stream);

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    On ne peut écrire directement en mémoire avec un flux C (à part dans un fichier temporaire), c'est leur plus grand défaut.

    Pour mettre directement des caractères unicodes en mémoire, utilise des wstring. Pour afficher ces wstring, tu peux essayer des putwc() sur stdout ou un appel à WriteConsoleW() si tu es sous Windows.
    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.

  11. #11
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	FILE* stream;
    	wchar_t str = '˄';
    	stream = stdout;
    	putwc(str,stream);
    Ca compile bien, mais les caractères ne s'affichent pas.
    J'ai repris un de tes exemples sur WriteConsoleW()
    http://www.developpez.net/forums/sho...=WriteConsoleW
    mais les caractères ne sont pas plus reconnus... (˄˅¬). Dans le meilleur des cas, le premier caractère est reconnu comme un '^', et le dernier correctement, mais pas le 2e.
    Je pense qu'il doit falloir utiliser un codepage particulier.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh...
    C'est supposé marcher, une séquence d'échappement HTML dans un caractère C ?

    Essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wchar_t c = L'\x2227';
    putwc(c, stdout);
    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.

  13. #13
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    non ca ne marche pas plus. Il marque un '?'.
    Ou alors le code héxa n'est pas bon, mais je me suis référé à ce document donc je pense que ca devrait être bon
    http://www.unicode.org/charts/PDF/U2200.pdf

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça doit vouloir dire que ce caractère n'est pas affichable en console.
    Essaie en changeant la police de la console : Utilise une police True Type (genre Lucida Console) au lieu des "polices raster"...
    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.

  15. #15
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    non ca ne marche pas. C'est pour ca que je pensais changer le type de codepage, enfin si je trouve quel code utiliser.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour une console Windows, la doc de SetConsoleOutputCP() indique que changer la page de codes ne sert à rien si tu ne changes pas également la police.
    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.

  17. #17
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    pour moi c'est sous entendu seletionner la police lucida

  18. #18
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Change ta console et utilise un terminal moderne à la place.
    Boost ftw

  19. #19
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    effectivement ca pourrait être une solution, sauf que dans le cadre de mon projet, on doit passer par la console

Discussions similaires

  1. [AC-2007] Affichage caractères unicode dans état
    Par microsophistic dans le forum IHM
    Réponses: 1
    Dernier message: 04/07/2011, 11h45
  2. [log4J] affichage des log4J dans la console (texte bleu)
    Par lalie.perso dans le forum Logging
    Réponses: 1
    Dernier message: 13/04/2006, 13h52
  3. [Eclipse 3.1.1] Afficher de l'unicode dans la Console
    Par Didier69 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 31/12/2005, 03h03
  4. [TOMCAT][LOGS]pas d'affichage de trace dans la console
    Par fabszn dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 23/08/2005, 02h28
  5. [xm] pb affichage caractère e dans l'o ..
    Par peppena dans le forum XML/XSL et SOAP
    Réponses: 21
    Dernier message: 25/02/2004, 10h16

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