Je suis en train de réaliser petit programme dans le cadre de mes études. J'aimerai y ajouter la gestion des accents. Je voudrai simplement remplacer les lettres accentuées par leur lettre "normale". Un "é" en "e" si vous préférez.
Mon programme lit dans un fichier des blocs de caractères. Je traite ensuites ces blocs caractères par caractères. Mais les lettres accentuées ne sont pas reconnues
if (lettre == 'é')
{
lettre = 'e';
}
ne fonctionne pas.
Merci de votre aide.
# re
Posté par Sylvain (site web personnel) . Évalué à 1.
[^] # Re: re
Posté par Henry-Nicolas Tourneur (site web personnel) . Évalué à 1.
[^] # Re: re
Posté par Sylvain (site web personnel) . Évalué à 1.
# Encodage
Posté par peck (site web personnel) . Évalué à 2.
En C, lorsqu'on veut manipuler proprement les caractères en prenant en compte leur encodage, on utilise les fonctions wide char comme mbtowc(3) qui convertit une chaine normale (encodée selon la locale) en chaine wide char que tu peux manipuler directement dans ton programme caractère par caractère ou avec les autres fonctions associées.
# unsigned char
Posté par tguez . Évalué à 2.
Il est possible aussi que l'internationalisation de ton éditeur de texte ne soit pas dans les mêmes normes que ta ligne de commande ou le mode graphique de ton programme !
cat Accents.c
devrait être révélateur : si tu ne vois pas les accents pareils que sous l'éditeur, t'as trouvé une vache de cause de perte de temps.
Sous Linux :
$ cat Accents.c
#include <stdio.h>
main()
{
unsigned char lettre = (unsigned char)'é' ;
printf("lettre numéro %d\n", (int)lettre) ;
if (lettre == (unsigned char)'é') {
printf("Lettre accentuée détectée...\n") ;
lettre = 'e';
}
printf("lettre numéro %d\n", (int)lettre) ;
return(0) ;
}
$ gcc Accents.c
Accents.c:5:40: attention : constante caractère multi-caractères
Accents.c:9:31: attention : constante caractère multi-caractères
$ ./a.out
lettre numéro 169
Lettre accentuée détectée...
lettre numéro 101
Attention les warnings "constante caractère multi-caractères" devraient être étudiés de près en environnement professionnel. Pour un TP, il y a matière à discuter avec tes profs sur ce vaste sujet de l'internationalisation...
Après pour aller plus loin, comme déjà signalé, mbrtowc()
et wcrtomb() et le type wchar_t (wide character), ça c'est le top... Il y a de quoi faire.
[^] # Re: unsigned char
Posté par Thibault (site web personnel) . Évalué à 2.
#include <stdio.h>
#include <wchar.h>
main()
{
wchar_t lettre = L'é' ;
printf("lettre numéro %d\n", (int)lettre) ;
if (lettre == L'é') {
printf("Lettre accentuée détectée...\n") ;
lettre = 'e';
}
printf("lettre numéro %d\n", (int)lettre) ;
return(0) ;
}
Note : le suffix "L" permet d'indiquer un caractère étendu, le type wchar_t est communément un char avec 31 bits de plus.
Note 2 : Si tu declares des wchar_t tu dois utiliser les fonctions qui vont avec dans wchar.h
Exemple :
strcpy devient wcscpy
strlen devient wcslen
etc...
Je pense que c'est plutôt cette solution que tu dois aborder dans ton programme.
# Un petit truc pour la gestion des accents en C
Posté par liberforce (site web personnel) . Évalué à 3.
En fait c'est un peu l'équivalent de g_ascii_strcasecmp de la glib que tu cherches.
http://library.gnome.org/devel/glib/stable/glib-String-Utili(...)
J'avais aussi eu des problèmes avec la gestion des accents il y a quelques temps.
http://blog.freeside.fr/post/2007/03/27/Oisiweb%3A-Comment-a(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.