Проблема с Unicode с freetype (C)
Вопрос
В настоящее время я работаю над библиотекой для НекоВМ чтобы создать привязку к Свободный Тип 2.Он написан на обычном c, и все это работает действительно хорошо, за исключением того, что когда пользователь вводит некоторые символы unicode, такие как "ü", "Ä" или "β", они преобразуются в какие-то уродливые квадратные буквы.
Когда я получаю данные из NekoVM, вы используете val_string
который возвращает char*
.Функция (FT_Load_Char
) там, где вы вводите данные в freetype, ожидается код без знака long as char.(Каждое письмо обрабатывается самостоятельно.)
Что нужно сделать, чтобы символы отображались правильно?У меня также есть возможность преобразовать их в любую кодовую страницу ISO-8859-XX, прежде чем отправлять их в библиотеку, написанную на c.
Решение 2
Решение было довольно простым:
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 обрабатывать все "кодирующие элементы" самостоятельно.
Другие советы
Маленький квадратный прямоугольник означает, что ваш символ не содержится в шрифте.Это может означать две вещи:
Используйте шрифт, содержащий эти символы
Используйте правильную кодировку.Видишь FT_CharMap - Карта и FT_Encoding - кодирование.