2009-10-06 5 views
0

Je travaille actuellement sur une bibliothèque pour le NekoVM pour créer une liaison à Freetype 2. Il est écrit en plaine c et tout fonctionne très bien, sauf lorsque l'utilisateur entre des caractères unicode comme " ü "," Ä "ou" ß "ils seront transformés en quelques lettres carrées laides.
Lorsque je reçois les données du NekoVM, vous utilisez val_string qui renvoie un char*. La fonction (FT_Load_Char) où vous poussez les données dans freetype attend un code char long non signé. (Chaque lettre est traitée seule.)Unicode problème avec freetype (C)

Que faire pour que les caractères soient rendus correctement? J'ai également la possibilité de les convertir en n'importe quelle page de code ISO-8859-XX avant de les soumettre dans la bibliothèque écrite c.

+0

Est-ce que chacun des caractères non-ASCII se transforme en une seule boîte? Ou se transforment-ils en plus d'un personnage? – Artelius

+0

juste une boîte @ artelius – TheHippo

Répondre

3

La solution est assez simple:

for (i=0;i<l;i++) { 
    unsigned long c = FT_Get_Char_Index(face,r[i]); 
    FT_Load_Glyph(face,uc,FT_LOAD_RENDER); 
    .... 
} 

Cela rend freetype gérer tous les "encoding-stuff" à son propre.

3

Une petite case carrée signifie que votre caractère n'est pas contenu dans la police. Cela peut vouloir dire deux choses:

  1. Utilisez une police qui contient ces caractères

  2. Utilisez l'encodage correct. Voir FT_CharMap et FT_Encoding.

+0

le caractère est dans la police (c'est la même chose que j'utilise sur mon système d'exploitation et là ces caractères sont affichés.) – TheHippo

+0

Dans ce cas, c'est un problème d'encodage. –