2012-07-16 15 views
6

Quindi, ho un'implementazione che analizza un xml che, tra le altre cose, contiene le posizioni e le stringhe della pagina principale di Wikipedia. L'analisi viene eseguita con rapidxml dopo il quale le stringhe vengono convertite da UTF-8 a UTF-32 da http://utfcpp.sourceforge.net/. Il codice UTF-32 viene quindi utilizzato in freetype di:Problemi Unicode in FreeType

unsigned long c = FT_Get_Char_Index(face,*p); 
FT_Load_Glyph(face,c,FT_LOAD_RENDER); 

dove * p è il codice char UTF-32. Questo glifo viene quindi reso in OpenGL.

Ora, non riesco a far funzionare caratteri crilici, né cinese o giapponese o viet, sono sicuro che * p corrisponde al codice corretto, e sarei grato per qualsiasi suggerimento che posso ottenere.

Per questi tipi di carattere viene utilizzato il file arial.ttf, dal Arch linux package e da quello che ho visto nei programmi di visualizzazione dei font, dovrebbe contenere i caratteri che desidero.

risposta

7

due cose da suggerire:

In primo luogo, hanno hai chiamato FT_Select_Charmap per specificare che si sta utilizzando una codifica Unicode?

FT_Select_Charmap(face , ft_encoding_unicode); 

In secondo luogo, i font Arial non tutti hanno tutti i caratteri, e alcuni spettatori di font (su Windows, in ogni caso) può indurre in errore, sostituendo automaticamente glifi da diverse facce. Prova ArialUni.ttf se riesci a trovarlo.

+1

Grazie per i vostri suggerimenti! L'utilizzo di FT_Select_Charmap non ha prodotto risultati diversi, suppongo che l'unicode sia l'impostazione predefinita di freetype? C'è qualche font gratuito che contiene i caratteri che sto cercando che tu possa consigliare? –

+1

Re. font, comincerei qui: http://en.wikipedia.org/wiki/Unicode_typeface - e un'altra cosa da verificare è quella di breakpoint prima di chiamare 'FT_Get_Char_Index' e controllare esattamente quale punto di codice stai passando. Potrebbe esserci un bug nel tuo utilizzo di rapidxml o utfcpp ... – Roddy

+1

La codifica predefinita di Freetype dipende dal tipo di carattere che stai utilizzando e da altre cose. Consiglierei di specificare la codifica in modo esplicito. – Roddy

1

Non dimenticare di impostare la dimensione del carattere subito dopo aver caricato la faccia.

FT_Error err = FT_Set_Pixel_Sizes(face, (width), (height));