Bonjour
J'ai un petit problème fgets ne détecte pas les caractères accentués...
Comment pourrai-je procèder ??
Merci
Bonjour
J'ai un petit problème fgets ne détecte pas les caractères accentués...
Comment pourrai-je procèder ??
Merci
fgets() n'a rien à voir. Poste ton code.Envoyé par Force_Rouge
Sachant que pour le moment je fais des tests le code n'est pas tres impressionnant...
:-/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char car[1]={0}; fgets (car ,2, pf); printf("%s",car);
Tu n'alloues pas assez de place pour ton tableau car... Où veux-tu qu'il stocke le '\0' de fin de chaîne?Envoyé par Force_Rouge
En plus tu donnes 2 comme taille du tableau à fgets!!
Il faudrait mieux faire:
Cela éviterait des problèmes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char car[16]={0}; fgets (car ,sizeof car, pf); printf("%s",car);
Jc
hmmm...oui je suis con...
mais je fais une lecture car par car pour pourvoir filtrer la ponctuation donc:
Mais cela ne règle pas mon problème d'accents :'(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char car[2]={0}; fgets (car ,sizeof car, pf); printf("%s",car);
Utilise fgetc alors.Envoyé par Force_Rouge
Si tu veux filtrer la ponctuation tu peux utiliser strtok.
Non, mais suffit pour écrire des bétises....Envoyé par Force_Rouge
Il ne faut pas mentir à ton compilateur. car accepte 1 char et tu dis à fgets() qu'il peut en accepter 2 ! Le comportement est indéfini.
et n'oublie pas de fournir <stdio.h> et que fgets() prend le '\n' quand il y a la place.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char car[80]; fgets (car ,sizeof car, pf); printf("%s",car);
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
La bonne fonction est donc fgetc()...Envoyé par Force_Rouge
Si problème d'accents il y a, il ne vient pas de fgets() qui n'y peut rien, mais du système, qui, lorsqu'on lui envoit (par printf) une certaine valeur (lue dans le fichier) affiche un glyphe qui ne correspond pas aux attentes, tout simplement par ce que le charset n'est pas pas le même. Typiquement, tu as de l'ANSI dans le fichier et tu affiche avec la console de Windows qui est par défaut en OEM...Mais cela ne règle pas mon problème d'accents :'(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char car[2]={0}; fgets (car ,sizeof car, pf); printf("%s",car);
(Il y a des noms plus savants que ANSI et OEM)
Sous linux tout devrait être dans le charset utilisé par la locale.
Tape echo $LANG dans un terminal pour savoir ce que c'est.
Maintenant, il faut savoir quel charset a été utilisé pour créer le fichier...Envoyé par Force_Rouge
Je pense le même j'ai juste fait créé un nouveau texte dans gedit o__O
Je ne suis pas sûr qu'un programme en C gère forcément bien l'UTF-8 : Il lui faut plusieurs caractères pour une seule lettre accentuée. Ensuite, à supposer que le terminal supporte lui aussi l'UTF-8 (je ne pensais même pas que cela était possible), il faut bien envoyer la séquence de caractères dans le même ordre qu'on l'a lue...
Dans ton cas, fgetc lit un octet et en utf-8 les caractères sont multi-octets.
Il faut donc faire attention.
[C99]wprintf permet d'afficher les caractères étendus, enfin si ton compilateur l'implémente correctement, si tu utilise gcc c'est pas gagné
!!!???enfin si ton compilateur l'implémente correctement, si tu utilise gcc c'est pas gagné
http://www.developpez.net/forums/viewtopic.php?t=445548Envoyé par loufoque
http://gcc.gnu.org/c99status.html
ça répond à tes interrogations ?
Oui enfin ça marche très bien, c'est juste qu'on peut pas saisir des caractères non ASCII avec L'' ou L"", ce qui est facilement explicable étant donné que pour ça il faudrait faire une conversion depuis l'utf-8 vers UCS-2 ou UCS-4, en partant du principe que les caractères larges servent pour Unicode.
En tous cas ce n'est nullement un problème et de toutes façons les caractères larges ça a vraiment peu d'intérêt.
D'ailleurs y'a qu'en programmation windows que c'est vraiment utilisé.
Bon j'ai trouvé l'erreur en fait mais je trouve que c'est quand même bizarre...
J'avais un premier fgets dans mon code qui me servait a faire une première lecture...c'est ce fgets qui ne "marchait" pas mais dès que je le met dans une boucle (while(!feof(pf))) ça marche à merveille...même les accents...
-_-'
Merci à vous tous pour votre aide
Partager