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 !
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 !
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.
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
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).
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.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
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
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
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 !
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; }
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.
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 !![]()
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
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
Partager