Affichage les caractères accentué sur c/c++ [Fermé]

Messages postés
2
Date d'inscription
vendredi 4 novembre 2011
Statut
Membre
Dernière intervention
5 novembre 2011
- - Dernière réponse :  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 ?
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
1
Date d'inscription
jeudi 28 janvier 2016
Statut
Membre
Dernière intervention
28 janvier 2016
3
3
Merci
Si en C++, vous pouvez déclarer:
#include<locale> //instruction pré-processeur

Puis dans le Main:

setlocale(LC_CTYPE, "fra");

Dire « Merci » 3

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 70312 internautes nous ont dit merci ce mois-ci

JE Vous remercie pour ç'est information
Messages postés
16075
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 novembre 2019
2455
0
Merci
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
Salut. Merci pour l'application. Juste que pour moi, (char) 130 ne marche pas. Peux tu m'expliquer?
Merci
Messages postés
419
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
10 novembre 2019
46
0
Merci
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 ;-)