Юникод проблема с freetype (C) - PullRequest
       40

Юникод проблема с freetype (C)

0 голосов
/ 06 октября 2009

В настоящее время я работаю над библиотекой для NekoVM , чтобы создать привязку к Freetype 2. Она написана на простом c и все работает действительно хорошо, за исключением случаев, когда пользователь вводит некоторые символы Юникода, такие как «ü», «Ä» или «ß», они будут преобразованы в некрасивые квадратные буквы.
Когда я получаю данные от NekoVM, вы используете val_string, который возвращает char*. Функция (FT_Load_Char), в которую вы помещаете данные в произвольный тип, ожидает, что символ без знака будет длинным, как код символа. (Каждое письмо обрабатывается самостоятельно.)

Что делать, чтобы символы правильно отображались? У меня также есть возможность преобразовать их в любую кодовую страницу ISO-8859-XX перед отправкой их в письменную библиотеку c.

Ответы [ 2 ]

3 голосов
/ 12 октября 2009

Решение было довольно простым:

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

Это заставляет freetype обрабатывать все «вещи кодирования» самостоятельно.

3 голосов
/ 06 октября 2009

Небольшое квадратное поле означает, что ваш персонаж не содержится в шрифте. Это может означать две вещи:

  1. Используйте шрифт, который содержит эти символы

  2. Используйте правильную кодировку. См. FT_CharMap и FT_Encoding .

...