Problème d'accents

Problème d'accents - C - Programmation

Marsh Posté le 04-04-2005 à 13:55:39    

Dans un petit programme que j'utilise pour tester une liste chaînée simple de personnes, j'ai une option qui me permet d'afficher le contenu de ma liste.
 
Mon problème est le suivant: quand je mets des accents dans un nom, la chaîne grandit d'un espace par accent !!
 
Je m'explique : voici un exemple d'affichage:
 

Code :
  1. 1:     Bernard       AAAAAA    5
  2. 2:       Henry     BBBBBBBB   12
  3. 3:  Bérénice          CCCCC    9
  4. 4:       Louis      DDDDDDD   25


 
Bérénice a deux accents, et le mot se voit affublé de deux expaces à la fin lors de l'affichage.
 
Voici le code qui gère cet affichage:
 

Code :
  1. OuvrirListe(L);
  2. r=1;printw("\n" );
  3. while(!FinListe(L))
  4.     {
  5.     pers=(pPersonne) ElementCourant(L);
  6.     printw("\n %2d : %21s %21s %4d", r, pers->Prenom, pers->Nom, pers->age);
  7.     // bizarre, chaque accent d'un mot ajoute un espace en fin de mot ???
  8.     r++;
  9.     }


 
Le printw est du à la bibliothèque ncurses que j'utilise sous Linux, et qui a la même fonction que printf, mais cela ne m'avait jamais posé ce problème...
 
J'ai vérifié l'encoding de la console et de mon éditeur, tous les deux sont en unicode...
 
Alors, d'où peut provenir ce problème de décalage à l'affichage, manifestement lié à la présence d'accents ???
 
Qui peut m'aider ?

Reply

Marsh Posté le 04-04-2005 à 13:55:39   

Reply

Marsh Posté le 04-04-2005 à 23:14:16    

les accents caÿ MÄL  
//ca fait nimporte quoi (essaie le "à" il fait tout bugguer :D)

Reply

Marsh Posté le 05-04-2005 à 03:39:49    

printw (comme printf) n'est pas fait pour afficher de l'utf8. Utilise plutôt wprintw (équivalent curses de wprintf).
 
En utf8 les caractères "spéciaux" prennent deux octets (ou plus). J'imagine que printw compte bêtement les octets (à la strlen) pour calculer la largeur de la chaine et aligner l'affichage, ce qui n'est évidemment pas bon en utf8 (ou utf16 ou utf32).

Reply

Marsh Posté le 05-04-2005 à 07:51:05    

Enfin quelqu'un qui me donne une réponse de valable !!
Ton explication tient très bien la route, Matafan !!
 
Merci !!
 
Je vais essayer ce soir de ré-encoder le tout en "texte normal" iso, sous mon Linux !
;-)

Reply

Sujets relatifs:

Leave a Replay

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