Bonsoir à tous :)
J'aurais encore une fois besoin de votre expertise pour cette fois les chaînes de caractère unicode.
J'ai commencé à coder un module pour gérer les chaînes, ajouté le support unicode, et tout semble marcher à peu près correctement, sauf l'affichage...
Quand je veux afficher une chaine qui contient vraiment des caractères spéciaux (par exemple des kanjis ou des voyelles avec umlaut), bah le printf ne l'affiche pas (pourtant avec %ls).
Interloqué, j'ai donc vérifié le contenu de ma chaine en l'affichant caractère par caractère avec putwchar(), et là tout apparaît sans problème.
J'en ai donc déduit (à tort ?) qu'une conversion wchar_t->multibyte devait avoir lieu en fourbe dans printf()... J'ai alors codé une fonction pour faire la conversion manuellement avec wcstombs(3). Mais quand je l'utilise, il s'avère que celle ci échoue avec "Invalid or incomplete multibyte or wide character"...
Comme j'ai une locale douteuse (en_US.eucJP), j'ai envoyé mon code à un ami windowsien qui a testé ça sous Dev-C++, et le programme semble marcher correctement, sauf que la console windows affiche Û au lieu de é. Ça arrive souvent avec d'autres programmes, mais ne serait-ce pas du à une mauvaise gestion de l'unicode dans mon code (et celui des autres programmes qui font ça) ?
J'ai mis mon code en ligne ici:
http://mammouth.tuxfamily.org/m_string.c
http://mammouth.tuxfamily.org/m_string.h
Je vous serais extrêmement reconnaissant si vous pouviez jeter un coup d'oeil et me dire si chezvousçamarche® ou bien ce qui ne va pas...
À défaut, des pointeurs sur de bons sites portant sur la gestion de l'unicode en C ISO seraient les très bienvenus !
Merci d'avoir lu ce long post jusqu'au bout, et merci d'avance pour vos réponses :)
# glib ?
Posté par billy . Évalué à 1.
si tu utilises des wchar_t -> wprintf()
[^] # Re: glib ?
Posté par JaguarWan . Évalué à 0.
Pour wprintf, j'y ais pensé mais apparemment la seul différence avec le printf de base c'est qu'il accepte un format en wchar_t -- printf("%ls", bidule); et wprintf(L"%ls", bidule); font exactement la même chose :)
[^] # Re: glib ?
Posté par Christophe Fergeau . Évalué à 1.
[^] # Re: glib ?
Posté par JaguarWan . Évalué à 1.
jaguarwan@Jaguar:~/Projects/MammouthServer-0.3$ LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8 ./a.out
Schöne Grüße
* allocating bouga
-> Multibyte conversion: bouga
* testing string_cpy
-> bouga is a copy of bouga
* allocating coin
* testing string_pre
-> bougacoin was prepended bouga
* testing string_cat
-> bougacoinbouga was appended bouga
* testing string_del
* testing string creation with string_cmov
Sch�e Gr� <--- affichage brut du contenu de la chaine avec putwchar()
-> Multibyte conversion: Schöne Grüße
-> Schöne Grüße was created using string_cpre
* testing string_upper
-> SCHÖNE GRÜßE was converted to upper case
* testing string_lower
-> schöne grüße was converted to lower case
M'enfin, maintenant reste à faire cohabiter ça avec des chaines binaires :]
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.