Affichage les caractères accentué sur c/c++

yassir zaki Messages postés 2 Statut Membre -  
 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 ?
A voir également:

3 réponses

Snowman001 Messages postés 1 Statut Membre 9
 
Si en C++, vous pouvez déclarer:
#include<locale> //instruction pré-processeur

Puis dans le Main:

setlocale(LC_CTYPE, "fra");
8
moncef
 
JE Vous remercie pour ç'est information
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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
0
Alimou HD®
 
Salut. Merci pour l'application. Juste que pour moi, (char) 130 ne marche pas. Peux tu m'expliquer?
Merci
0
Dalfab Messages postés 720 Statut Membre 101
 
Bonjour,

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 ;-)
0