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 :

Afficher les caractères étendus dans la console


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut Afficher les caractères étendus dans la console
    Bonjour

    Je cherche comment afficher les caractères étendus en c++ dans la console
    Comment faire ça?


    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    "caractères étendus", c'est très vague.

    Il n'y a rien de standard.

    Il faut être rigoureux avec l'encodage et la police utilisé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    Bonjour

    Je voudrais pouvoir afficher ces symboles

    Nom : base-images-asciioem.gif
Affichages : 773
Taille : 10,5 Ko

    comment faire ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Configure ta console pour travailler en CodePage1252 au lieu de l'OEM 850. -> chcp 1252
    Ou ne te prends pas le choix avec ça, cela n'en vaut pas la peine.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    comment on configure la console?
    je n'ai aucune idée

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    J'ai trouvé comment afficher les symbols ! donc mon problème est résolu

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 884
    Points : 219 334
    Points
    219 334
    Billets dans le blog
    123
    Par défaut
    Ça serait sympa de transmettre la méthode que vous avez trouvé.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    voici la méthode pour afficher les symboles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        for (int i=1; i<256; ++i)  
            cout<<  (char) i ;
        }
    return 0;
    }

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 125
    Points : 33 029
    Points
    33 029
    Billets dans le blog
    4
    Par défaut
    Tout ce que je vois c'est une boucle qui affiche les 255 caractères ASCII.
    Et qu'il faudrait écrire for (unsigned char c = 0; c < 256; ++c).

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par Bousk Voir le message
    il faudrait écrire for (unsigned char c = 0; c < 256; ++c).
    Je n'ai pas testé, mais ça sent la boucle infinie, ça... Le code avec int était correct.

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    pour information, l'ASCII ne contient que 128 caractères, les 128 suivants étant fortement dépendant de la "locale".

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 125
    Points : 33 029
    Points
    33 029
    Billets dans le blog
    4
    Par défaut
    effectivement, p-e plutôt comme ça en jouant sur l'overflow
    for (unsigned char c = 1; c; ++c)

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je me demande si c'est défini, par contre...

  14. #14
    Membre éprouvé Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par leternel Voir le message
    pour information, l'ASCII ne contient que 128 caractères, les 128 suivants étant fortement dépendant de la "locale".
    L'expérience m'a montré une situation pire que cela. Pour les caractères supérieurs à 128, le bits de poids fort n'est pas forcement conservé selon le compilateur et les optimisations. J'ai récemment eu le cas d'un bug causé par un 0xC7 se transformant 0x57 lors de la transmission d'un char en paramètre de fonction.

    Utiliser des char pour des caractères non ascii est vraiment une mauvaise idée.

  15. #15
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    Bonjour,

    J'ai récemment eu le cas d'un bug causé par un 0xC7 se transformant 0x57 lors de la transmission d'un char en paramètre de fonction
    C'est vraiment étrange, d'autant plus qu'un char est avant tout un entier.
    Est-ce que ce cas c'est produit dans le monde de l'embarqué ? Ils ne respectent pas toujours les normes .

  16. #16
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Neckara Voir le message
    C'est vraiment étrange, d'autant plus qu'un char est avant tout un entier.
    Est-ce que ce cas c'est produit dans le monde de l'embarqué ? Ils ne respectent pas toujours les normes .
    Vu de la norme, la plage garantie pour un char est [0, 127] ([0,255] pour les unsigned char et [-127, 127] pour les signed char). Y mettre autre chose qu'une de cas valeurs entières ou qu'un des caractères définis par la norme n'est pas portable.

    En particulier, considéré qu'un plain char est signé est une source classique de problème même dans les environnements respectant la norme (dans ce cas, c'est le code qui n'est pas conforme pas l'environnement).

  17. #17
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    D'accord, je pensais que la norme imposait que le char soit un signed char ou un unsigned char (avec conversion implicite).

    Mais comme char est un entier, le comportement me paraît tout de même étrange.
    La norme indique une plage minimale, mais si on dépasse cette plage, je pense que le comportement devrait rester cohérent et garanti par la norme.

    Si on donne, dans l'implémentation, une plage [[0 127]], on fait en sorte que le char ne puisse contenir que des valeurs de la plage [[0 127]]. Si on tente de lui mettre 128, on fait en sorte qu'il contienne 0.

    Sinon, cela voudrait dire qu'il serait possible d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c = 128;
    char d = c;
    if (c != d)
         ; // on se retrouve ici.
    Ou pour être plus "clair", c'est comme si 0x80 en mémoire pouvait avoir deux valeurs : 0x80 ou 0x00 selon l'optimisation du compilateur/où on est dans le code.

    Ce serait complètement illogique.

  18. #18
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par fenkys Voir le message
    L'expérience m'a montré une situation pire que cela. Pour les caractères supérieurs à 128, le bits de poids fort n'est pas forcement conservé selon le compilateur et les optimisations. J'ai récemment eu le cas d'un bug causé par un 0xC7 se transformant 0x57 lors de la transmission d'un char en paramètre de fonction.
    ECM? La meilleure explication que je vois est que le comportement observé n'est pas celui que tu décris. Il y a bien la possibilité de l'utilisation d'un compilateur non comforme qui utilise des char sur 7 bits. J'en connais même un mais je vois mal quelqu'un 1/ utiliser cette plateforme (PDP-10), 2/ la programmer en C et pas en assembleur, BLISS ou Fortran, 3/ utiliser le flag qui active ce comportement non conforme et 4/ considérer le résultat comme un bug.

    Un compilateur pour n'importe quelle plateforme a moitié raisonable va conserver le bit de poid fort, meme s'il ne compile que du C K&R (il y a eu beaucoup de problemes pour rendre "8 bit clean" les programmes écrits en C, mais c'est parce qu'une technique habituelle -- meme emacs un des rois des programmes portables en C l'utilisait -- etait de utiliser ce 8ieme bit comme flag et donc un compilo qui modifierait dans le code genere ou dans sa lib standard ce 8ieme bit aurait cause des problemes il y a bien longtemps).

    Utiliser des char pour des caractères non ascii est vraiment une mauvaise idée.
    Je fais ça depuis 20 ans, meme avec des jeux multi-bytes, j'ai jamais eu de problemes une fois que j'ai compris le modele que le C utilise pour sa gestion des jeux de caracteres (j'admets avoir mis plus de temps que je l'aurais voulu avant d'avoir compris ce modele).

    Citation Envoyé par LittleWhite Voir le message
    Ça serait sympa de transmettre la méthode que vous avez trouvé.
    La table qu'il a donne est celle la CP 850. Si je comprends bien le message de Luc, c'est celle par defaut de la console et donc il n'y a pas besoin de la configurer. (Je suppose que Luc pensait que l'OP avait un code source écrit avec CP 1252 et ne voyait donc pas des littéraux correctement).

    (En passant, "Code Page" -- CP -- est la classification IBM reprise par Microsoft de ce qu'on appelle ailleurs des jeux de caracteres code, coded character set, charset, codeset. Il y en a une serie qui sont basee sur l'EBCDIC.)

  19. #19
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Oui, c'était bien mon idée. Aujourd'hui les OP écrivent en CP1252 mais exécutent sur la console de Windows qui est toujours en OEM850.

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    À noter que la table affichée n'est pas la 850 (Europe occidentale), mais la 437 (États-Unis): Elle comporte des coins mixtes qui ont été remplacés par d'autres caractères dans la 850.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dev-Pascal] Afficher les caractères accentués dans la console et dans une MessageBox
    Par escargot72 dans le forum Free Pascal
    Réponses: 12
    Dernier message: 28/12/2014, 15h19
  2. Réponses: 0
    Dernier message: 28/03/2014, 18h45
  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. controler les caractères présents dans un JTextField.
    Par heider dans le forum Composants
    Réponses: 5
    Dernier message: 26/12/2005, 12h24
  5. Réponses: 6
    Dernier message: 14/07/2005, 14h25

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