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 :

Caractères accentués avec Code::Blocks


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Caractères accentués avec Code::Blocks
    Bonjour, je voulais savoir si il était possible dans un printf de mettre des caractères accentués sans qu'il change lors de l'éxecution (sous Windows par exemple avec CODE::BLOCKS) et si oui comment.
    Merci d'avance de m'aider !

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2015
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Jamais de Ma vie
    C'est un peu dur à répondre à ça parce-que de tous les corrigés des exercices en ligne je n'ai jamais vu un programme en C accepter les caractères accentués.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Pourtant rien ne l’empêche


    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
    #include<stdio.h>
     
     
    int main (int argc, char** argv)
    {
        unsigned char chinese_char[] = {0x20, 0xE5, 0xA4, 0xA7, 0xE5, 0xAE, 0xB6, 0x2C, 0x20, 0xE8, 0xB0, 0xA2, 0xE8, 0xB0, 0xA2, 0x21, 0x00};
        unsigned char russian_char[] = {0xD0, 0xA0, 0xD1, 0x83, 0xD1, 0x81, 0xD1, 0x81, 0xD0, 0xBA, 0xD0, 0xB0, 0xD1, 0x8F, 0x20, 0x41, 0x5A, 0x45, 0x52, 0x54,
                      0x59, 0x20, 0xD0, 0xBA, 0xD0, 0xBB, 0xD0, 0xB0, 0xD0, 0xB2, 0xD0, 0xB8, 0xD0, 0xB0, 0xD1, 0x82, 0xD1, 0x83, 0xD1, 0x80, 0xD0, 0xB0, 0x00};
     
        printf("%s\n\n%s\n\n", chinese_char, russian_char);
     
        printf("Vous avez pass\u00E9 en tout %d param\u00E8tres sur la ligne de commande.\n", argc);
     
        return 0;
    }

    Sous Windows, dans la console, il faut utiliser la commande chcp 65001 (change code page) ... mais certains caractères passent quand même pas

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Pour manipuler des caractères accentués (et plus généralement tous les glyphes non ASCII 7 bits), il faut que tous les éléments de la chaîne de compilation et d'exécution en soient capable.

    Il faut :
    • Que le langage sache manipuler ces caractères
      C/C++ sait les manipuler avec char (ASCII, ISO-8859, UTF-8) et wchar_t (UTF-16 et UTF-32).
    • Que le code source puisse les contenir
      Il y a plusieurs syntaxes. Par exemple puts("\302\253"); est équivalent à puts("«"); si le code source est encodé en ASCII.
    • Que le terminal soit capable de les afficher
      C'est là que ça bloque sur Windows. En effet le terminal affiche par défaut uniquement les 256 caractères de l'encodage ISO-8859.


    Pour que Windows puisse afficher des caractère spéciaux, il faut donc changer l'encodage du terminal comme l'indique foetus, mais aussi utiliser une police d'affichage qui contient les glyphes voulus (sinon on a un � qui le remplace).
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Une première à chose à faire est de s'assurer que le code source est sauvegardé en UTF8 par exemple pour prendre en compte les caractères accentués.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Une première à chose à faire est de s'assurer que le code source est sauvegardé en UTF8 par exemple pour prendre en compte les caractères accentués.
    Même si je me bats avec les IDEs (Visual et C++ Builder) pour sauvegarder tous mes fichiers en UTF-8, je ne suis pas trop d'accord

    Si tu échappes tous les caractères (comme dans mon bout de code), il te reste que de l'ASCII ... sauf si tu ne commentes pas en anglais


    Citation Envoyé par Bktero Voir le message
    Je suis étonné qu'on puisse mettre TOUS les caractères UTF8 dans des chars car un caractère Unicode peu-être codé sur plusieurs bytes en UTF8. Comment cela fonctionne du coup ? C'est à partir de C11 ou déjà en C99 ?
    Non rien de spécial: regarde mon code avec des UTF-8 code units

    L'UTF-8 c'est juste une succession d'octets: regarde la page wiki

  7. #7
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    D'accord merci mais pourriez vous montrer un petit bout de code avec des caractères accentués parce que le premier je ne l'ai pas trop compris (je suis pas très loin du niveau débutant) si il vous étiez possible de me l'expliquer avec un petit bout de code ce serait génial et merci de vos précédente réponse !

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
     
    printf("*Salut je m'appel Andr%c je travail sur le tri %c bulle %c version 01\n ",130,133,184);
            printf("c'est la 1%cre fois\n ",138);
     
            return 0;
    }

  9. #9
    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
    Avez-vous essayé avec wprintf() et des chaînes "larges"?
    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.

  10. #10
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Non, a vrais dire je ne sais même pas ce qu'est wprintf Mais je vais aller jeter un coup d'oeil , merci beaucoup !

  11. #11
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    l'interpréteur de commande Windows supporte parfaitement les caractères accentués, il suffit d'encoder la chaîne avec bon encodage. Pour les systèmes en français (France), c'est CP-850 (aussi appelé OEM-850). D'une manière générale, il est possible de trouvé l'encodage par défaut pour l'interpréteur dans le registre sous la clé "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage" dans la valeur "OEMCP" de type REG-SZ (pour l'encodage ANSI par défaut pour les APIs, c'est la valeur "ACP").

    Code::Block ne supporte pas cet encodage (il me semble, de mémoire) mais il suffit d'éditer le fichier source dans un éditeur qui le supporte (comme notepad++), puis tu modifie la chaine en question, tu enregistre ton fichier et enfin tu le compile de nouveau avec Code::Block. Et magie, magie, ..., ça marche.
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  12. #12
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Après vérification, Code::Blocks ne supporte effectivement pas CP-850 mais il supporte d'autres Code Page spécifique à l'interpréteur et donc peut être modifier dans ce sens. Personnellement, je n'ai pas les compétence pour le faire mais si quelqu'un qui lit ce message peut le faire, je suis preneur.
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

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

Discussions similaires

  1. Caractères accentués avec <html:link>
    Par papysam dans le forum Struts 1
    Réponses: 5
    Dernier message: 25/05/2007, 15h18
  2. [kjAPI] Compilation avec Code::Blocks
    Par ThomasCh dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 17/10/2006, 09h01
  3. Problème de caractères accentués avec CAM::DBF
    Par ustilago dans le forum Modules
    Réponses: 4
    Dernier message: 23/06/2006, 08h46
  4. [débutant]impossible d'éxecuter avec Code::blocks!
    Par Antigonos Ier Gonatas dans le forum Code::Blocks
    Réponses: 6
    Dernier message: 31/05/2006, 19h53
  5. caractères accentués avec Tsearch2
    Par nilytel dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/05/2005, 11h34

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