|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Étudiant Inscription : janvier 2005 Messages : 188 ![]() |
Bonjour,
J'ai déjà posté sur la mailing-list de SDL pour ce problème mais je n'ai pas eu de réponse... Alors j’essaie ici en espérant avoir plus de chance. J'ai un programme écrit en C[1] utilisant la bibliothèque SDL. Le code source est encodé en UTF-8. Donc quand je souhaite afficher du texte codé en dur je fais ça: Code :
TTF_RenderUTF8_Solid(font, text, color); Les caractères saisis par l'utilisateur semblent être encodés en UTF-16: typedef struct{ [...] Uint16 unicode; } SDL_keysym; Donc quand je souhaite afficher le texte saisis par l'utilisateur je fais ça : Code :
TTF_RenderUNICODE_Solid(font, &event.key.keysym.unicode, color); J'ai entendu parlé d'une solution avec iconv mais peut être que SDL a déjà une solution toute faite pour ça. Y a t'il une solution simple pour récupérer la saisie de l'utilisateur en UTF-8 ? Est-ce que vous pouvez me confirmer que j'ai bien de l'UTF-16 dans SDL_keysym.unicode ? Pourquoi les caractères en UTF-16 s'affichent très bien dans ma console sans conversion nécessaire vers de l'UTF-8 alors que quand j'essaie de les afficher avec la fonction TTF_RenderUTF8_Solid, les caractères ne s'affichent pas correctement? Est-ce que vous pouvez me montrer sur ce petit exemple comment appliquer la solution iconv pour convertir mon caractère UTF-16 en UTF-8 ? Merci. [1] Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Invité de passage
![]() Inscription : octobre 2008 Messages : 4 ![]() |
Oui la gestion de l'utf8 est très pénible, parce qu'en effet lorsqu'un utilisateur écrit 'é' l'évènement remplira keysym.unicode en UCS-2 (Unicode sur 2 octets, 16 bits).
L'avantage d'avoir les caractère sous forme d'entier en 16 bits, c'est que tu peux les mettre dans un tableau et les traiter bien plus facilement ! Je ne sais pas ce que tu souhaite faire, mais si tu veux faire une pseudo textbox, il est préférable de stocker ce que l'utilisateur entre avec le champ .unicode comme ça tu pourras effacer le dernier caractère, et autre manipulations plus simple. Si tu veux tout de même convertir tu peux passer par iconv, mais c'est lourd surtout pour ça. Il existe des fonctions toutes faites pour convertir de l'UCS-2 en UTF-8 voici par exemple : Code :
Il est important de mettre tout à zéro dans ta chaîne avant de la passer en paramètre, comme tu sais pas à l'avance combien de caractères vont être utilisés pour la conversion. NOTE: cette fonction considère que le deuxième paramètre est un UCS-4 (caractère unicode sur 32 bits) mais ce n'est pas gênant. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com