comment lire les caractères accentués dans un fichier texte ?

comment lire les caractères accentués dans un fichier texte ? - C - Programmation

Marsh Posté le 30-04-2006 à 21:36:09    

Bonjour,
 
je suis en train d'essayer de lire un fichier caractère par caractère mais ce fichier contient des caractères normaux mais aussi des accentués. Je ne parviens pas à obtenir qqch de correcte. Lorsque les caractères sont des normaux, pas de problème mais lorsqu'ils sont accentués ça patauge :(.
 
Est-ce que qqun saurait m'aider ?
 
Supposons le fichier déjà ouvert par fopen en lecture (texte). Pour récupérer un caractère j'utilise fread. L'ennui c'est que je ne maîtrise pas du tout ça et j'ai quelques soucis car ensuite je dois convertir ce caractère en char* (car une fonction de recherche dans une table de hachage utilise un argument char* et non char). J'ai essayé comme suit :
 

Code :
  1. char c;                                              //Caractere lu dans le fichier.  
  2. fread(&c, sizeof(unsigned char), 1, input);   //Lecture d'un caractere  
  3. fct = g_hash_table_lookup(lexical_hash, (char *)c); //Recherche dans la table.


 
J'utilise un unsigned char pour avoir la taille du code ASCII étendu. Si je fais un printf pour voir le résultat bon ça n'affiche rien car c'est accentué et c'est pas supporté. Le problème que j'ai c'est alors de passer le "char c" vers un "char *" sans avoir d'ennui. Ca je ne parviens pas à le faire.
 
Je suis donc venu vous demander comment est-ce que vous vous feriez pour lire un fichier texte caractère par caractère sachant que certains sont des accentués (aigu, grave, tréma, circonflexe et ce que sur les minuscule et d'autres des majuscules) et qu'ensuite le caractère lu doit passer dans une fonction de recherche qui demande un (char *).  
 
J'ai essayé de jouer avec des char * c dès le début mais j'ai tjrs eu des segfault dans fread (je maitrise pas) quelque soit l'argument que je lui passe (c, &c, *c; ...).
 
Sauriez-vous m'aider ?
 
Merci d'avance
 
 :hello:

Reply

Marsh Posté le 30-04-2006 à 21:36:09   

Reply

Marsh Posté le 30-04-2006 à 22:21:34    

1) il se passe quoi si le caractère est multioctet ?
2) (char*)c ça fait n'importe quoi

Reply

Marsh Posté le 30-04-2006 à 22:24:14    

Flitz a écrit :

je suis en train d'essayer de lire un fichier caractère par caractère mais ce fichier contient des caractères normaux mais aussi des accentués.  


Pour lire un fichier texte byte par byte, c'est  

Code :
  1. int c;
  2.    while ((c = fgetc(fp)) != EOF)
  3.    {
  4.       /* traitement */
  5.    }


Message édité par Emmanuel Delahaye le 30-04-2006 à 22:39:03

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 30-04-2006 à 22:33:20    

char par char

Reply

Marsh Posté le 30-04-2006 à 23:13:03    

Aïe aïe aïe, que personne ne dise octet par octet !!! :lol:


Message édité par Trap D le 30-04-2006 à 23:15:43
Reply

Marsh Posté le 01-05-2006 à 12:01:58    

merci de vos réponses  :jap:  
 
mais en fait j'ai tjrs du mal. Est-il possible qu'un caractère spécial tel "ä" "â" etc soient considérés comme 2 caractères (ou sur 2 octets) ?
 
De plus, avec fgetc qui renvoie un entier, comment je fais pour le transformer en char * après ? (car g_hash_table_lookup prend un char *)

Reply

Marsh Posté le 01-05-2006 à 13:06:24    

oui, ça dépend de ton codage de caractère. si c'est de l'utf-8 par exemple, c'est exactement ce qui se passe.

Reply

Marsh Posté le 01-05-2006 à 13:07:39    

http://developer.gnome.org/doc/API [...] -next-char
 
 
avec ce genre de chose, tu peux itérer caractère logique par caractère logique (et non char par char ce qui n'a aucun sens)

Reply

Marsh Posté le 01-05-2006 à 20:27:44    

Taz a écrit :

http://developer.gnome.org/doc/API [...] -next-char
 
 
avec ce genre de chose, tu peux itérer caractère logique par caractère logique (et non char par char ce qui n'a aucun sens)


 
Merci beaucoup de ton aide et de ton lien, je ne savais pas que ce genre de chose existait. Je vais aller voir ça  
 
bonne soirée  
 :jap:

Reply

Marsh Posté le 02-05-2006 à 15:45:54    

Si sous windows,
voir les fonctions CharToOem et OemToChar, avant l'affichage en console.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed