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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    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
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Centrafrique

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

    Informations forums :
    Inscription : Avril 2015
    Messages : 1
    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 confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    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 771
    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
    736
    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 : 736
    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).

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    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 confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    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 771
    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

+ 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