Affichage les caractères accentué sur c/c++
yassir zaki
Messages postés
2
Statut
Membre
-
moncef -
moncef -
j'ai un petit problème dans langage c Je commence le développement en C et j'ai un problème d'affichage.
le é de écriture est devenu ù (l'accent sur le u est dans l'autre sens)
Alors j'ai essayé tous les caractères accentués et aucun ne correspond, j'obtiens des caractère bizarre.
Quelqu'un peut il me donner une explication et une solution ?
le é de écriture est devenu ù (l'accent sur le u est dans l'autre sens)
Alors j'ai essayé tous les caractères accentués et aucun ne correspond, j'obtiens des caractère bizarre.
Quelqu'un peut il me donner une explication et une solution ?
A voir également:
- Caractère accentué
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
- Caractere speciaux mac - Guide
3 réponses
Si en C++, vous pouvez déclarer:
#include<locale> //instruction pré-processeur
Puis dans le Main:
setlocale(LC_CTYPE, "fra");
#include<locale> //instruction pré-processeur
Puis dans le Main:
setlocale(LC_CTYPE, "fra");
moncef
JE Vous remercie pour ç'est information
Lorsque tu écris ton message sur la console il est encodé en Latin-1 (clavier français) alors qu'il est interprété par le programme comme étant ASCII.
Voici une table des lettres accentuées, tu as par exemple le 'é' qui vaut 130 en ASCII mais 233 en Latin-1. Donc toi quand tu écris 'é', le caractère vaut 233 (en Latin-1) mais pour ton programme ça correspond à 'Ú' (le caractère 233 en ASCII).
Si tu veux que ça marche il faut que ton programme reçoive la valeur 130 (en ASCII), c'est à dire que tu entres le caractère ''' Attention : ce n'est pas l'apostrophe ("single quote" qui vaut 39) mais "low left rising single quote" (qui vaut 130 en Latin-1).
Une manière simple de faire est d'afficher (char) 130
La confiance n'exclut pas le contrôle
Voici une table des lettres accentuées, tu as par exemple le 'é' qui vaut 130 en ASCII mais 233 en Latin-1. Donc toi quand tu écris 'é', le caractère vaut 233 (en Latin-1) mais pour ton programme ça correspond à 'Ú' (le caractère 233 en ASCII).
Si tu veux que ça marche il faut que ton programme reçoive la valeur 130 (en ASCII), c'est à dire que tu entres le caractère ''' Attention : ce n'est pas l'apostrophe ("single quote" qui vaut 39) mais "low left rising single quote" (qui vaut 130 en Latin-1).
Une manière simple de faire est d'afficher (char) 130
La confiance n'exclut pas le contrôle
Bonjour,
Le problème des caractères spéciaux est toujours complexe. Déjà il se résout différemment :
Le pire étant le C sous Windows avec un éditeur Windows et un compilateur non Microsoft!
Comment ça marche ? Il existe de nombreux caractères spéciaux (les caractères arabes, cyrilliques, chinois, accentués, ...)
Une chaîne de caractères C est une succession d'octets. Hors un octet ne peut que stocker 256 valeurs différentes.
Pour résoudre ceci, il existe de nombreuses possibilités :
A) se contenter des caractères ASCII non étendus (donc pas d'accent, ...)
B) Supposer que l'on est dans une 'locale' donnée et se contenter des 256 possibilités. On parle d'ASCII étendu. Par exemple la CP1252 parfois nommée ANSI, la ISO-8859-1 ou Latin1, ou d'autres...
C) Le mode multibytes qui consiste à coder certains caractères sur plus d'un octet, lui aussi dépend d'une 'locale'.
D) Le mode UTF-8, lui aussi code les caractères sur 1 à 5 octets. Dans ce cas tous les caractères mondiaux sont disponibles, encore faut-il que la console d'affichage les aie tous!
E) Le mode WideChar consiste à utiliser des mots plutôt que des octets.
E.1) mots de 16 bits en format UCS2. Ce format est moins complet que l'UTF-8 mais permets d'afficher quasiment tous les caractères.
E.2) mots de 16 bits en format propriétaire.
E.3) mots de 32bits en format UTF32 ou UCS4. Là on a un caractère pour chaque mot.
F) Le mode UTF-16, avec des mots de 16bits. Tous les caractères mondiaux tiennent sur 1 ou 2 mots.
G) Le mode UTF-32 qui est équivalent au cas (E.3)
Dans le mode Linux ou QNX, l'utilisation de l'UTF-8 est un moyen 'simple' (on utilise un éditeur compatible UTF-8, le compilateur détecte les fichiers UTF-8, il ne reste qu'à s'assurer que la console est en mode UTF-8).
Dans le mode Windows, c'est l'anarchie car il faut faire cohabiter les consoles commande (souvent Windows-850), les fenêtres windows (CP1252 en Europe), et Windows qui préconise ce qu'il appelle UNICODE pour les applications (UCS2). On peut passer par des fonctions de conversions.
Ma solution : J'ai prefere eviter d'ecrire des chaines accentuees ;-)
Le problème des caractères spéciaux est toujours complexe. Déjà il se résout différemment :
- en C et en C++
- dépend du système (Linux, Windows ou autre)
- l'éditeur utilisé
- le compilateur utilisé.
Le pire étant le C sous Windows avec un éditeur Windows et un compilateur non Microsoft!
Comment ça marche ? Il existe de nombreux caractères spéciaux (les caractères arabes, cyrilliques, chinois, accentués, ...)
Une chaîne de caractères C est une succession d'octets. Hors un octet ne peut que stocker 256 valeurs différentes.
Pour résoudre ceci, il existe de nombreuses possibilités :
A) se contenter des caractères ASCII non étendus (donc pas d'accent, ...)
B) Supposer que l'on est dans une 'locale' donnée et se contenter des 256 possibilités. On parle d'ASCII étendu. Par exemple la CP1252 parfois nommée ANSI, la ISO-8859-1 ou Latin1, ou d'autres...
C) Le mode multibytes qui consiste à coder certains caractères sur plus d'un octet, lui aussi dépend d'une 'locale'.
D) Le mode UTF-8, lui aussi code les caractères sur 1 à 5 octets. Dans ce cas tous les caractères mondiaux sont disponibles, encore faut-il que la console d'affichage les aie tous!
E) Le mode WideChar consiste à utiliser des mots plutôt que des octets.
E.1) mots de 16 bits en format UCS2. Ce format est moins complet que l'UTF-8 mais permets d'afficher quasiment tous les caractères.
E.2) mots de 16 bits en format propriétaire.
E.3) mots de 32bits en format UTF32 ou UCS4. Là on a un caractère pour chaque mot.
F) Le mode UTF-16, avec des mots de 16bits. Tous les caractères mondiaux tiennent sur 1 ou 2 mots.
G) Le mode UTF-32 qui est équivalent au cas (E.3)
Dans le mode Linux ou QNX, l'utilisation de l'UTF-8 est un moyen 'simple' (on utilise un éditeur compatible UTF-8, le compilateur détecte les fichiers UTF-8, il ne reste qu'à s'assurer que la console est en mode UTF-8).
Dans le mode Windows, c'est l'anarchie car il faut faire cohabiter les consoles commande (souvent Windows-850), les fenêtres windows (CP1252 en Europe), et Windows qui préconise ce qu'il appelle UNICODE pour les applications (UCS2). On peut passer par des fonctions de conversions.
Ma solution : J'ai prefere eviter d'ecrire des chaines accentuees ;-)