GTK+ utilise l'encodage UTF-8 pour le traitement et l'affichage des chaines de caractères, ce qui peut poser problème et gêner l'affichage des les caractères spéciaux et des accents. On aura alors une erreur de ce type dans la console :
Code : Console | ** (programme.exe) : WARNING **: Invalid UTF8 string passed to pango_layout_set_text() |
La solution qui permet de remédier à ce problème est simple, il suffit de convertir la chaine en question en UTF-8, comme vous l'avez vu dans le chapitre sur les labels :
Code : C1
2
3
4
5
6
7
8 | #define UTF8(string) g_locale_to_utf8(string, -1, NULL, NULL, NULL)
/* encodage */
gchar *chaine = UTF8("Un texte accentué, avec des caractères bizarres... $23, 32?, £18...");
/* utilisation de la chaine */
<...>
/* libération de la chaine allouée */
g_free(chaine);
|
Cependant, il est tout de même assez lourd de devoir passer par un encodage, puis de libérer la mémoire après utilisation… Alors qu'il y a bien plus simple !
Pourquoi ce problème ?
Nous avons un conflit d'encodage entre les chaines traitées par GTK+ (UTF-8), et celles que vous tapez dans votre IDE (ISO-38547 ou autre…). Conclusion : votre éditeur n'utilise pas le même encodage que GTK+.
Comment le résoudre ?
Pour résoudre le problème, il faudrait que votre éditeur, et donc vos fichiers sources, utilisent l'encodage UTF-8. Voici comment faire :
Sous Linux : il est très probable que vos fichiers soient déjà encodés en UTF8, ainsi pas de problème. Si ce n'est pas le cas, vous pouvez généralement régler cela dans le préférences de votre éditeur. Pour info, Code::Blocks utilise l'UTF-8 par défaut.
Sous Windows : sur cet OS, le problème est
systématique. Soit vous choisissez d'utiliser un éditeur externe dont on peut choisir l'encodage, soit vous utilisez les
nightly builds de Code::Blocks.
Sous Mac OS : XCode vous permet de choisir l'encodage (menu
Format >
File encoding >
Unicode UTF8). Si vous utilisez un éditeur externe, comme
Smultron, vous pourrez également utiliser l'encodage de votre choix.
C'est tout ?
Oui.

Réenregistrez vos fichiers avec le nouvel encodage, puis compilez : comme par magie, plus besoin de convertir vos chaines !
Merci qui ?