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

Fermé
yassir zaki Messages postés 2 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 5 novembre 2011 - 5 nov. 2011 à 18:22
 moncef - 9 nov. 2019 à 23:27
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 ?

3 réponses

Snowman001 Messages postés 1 Date d'inscription jeudi 28 janvier 2016 Statut Membre Dernière intervention 28 janvier 2016 9
28 janv. 2016 à 03:43
Si en C++, vous pouvez déclarer:
#include<locale> //instruction pré-processeur

Puis dans le Main:

setlocale(LC_CTYPE, "fra");
8
JE Vous remercie pour ç'est information
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 5/11/2011 à 19:06
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
Salut. Merci pour l'application. Juste que pour moi, (char) 130 ne marche pas. Peux tu m'expliquer?
Merci
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
7 févr. 2016 à 20:58
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