SDL2_ttf是否无法呈现长度超过两个字节的字符?

时间:2016-06-02 17:31:31

标签: c++ sdl true-type-fonts sdl-ttf

我在程序中从SFML切换到SDL2,我开始使用SDL2_ttf以UTF-8格式呈现文本。我使用函数TTF_RenderUTF8_Solid。我注意到一些字符不再正确呈现。一个例子是''' (U + 1F70D)。我确认该字体包含这些字符。

我尝试使用SDL2_ttf中包含的glfont示例程序,它也不会渲染这些字符。

我转到了SDL2_ttf源代码,并查看了SDL_ttf.c中的函数TTF_RenderUTF8_Solid,并注意到这一行:

    Uint16 c = UTF8_getch(&text, &textlen);

,而UTF8_getch返回Uint32。因此,丢弃较高的两个字节(并且它们不会在代码中的任何其他位置读取),这解释了为什么''没有渲染(它不适合Uint16)。我改变了' c'到Uint32,并正确分配0x1F70D。它仍然没有呈现。很可能还有其他地方不考虑超过两个字节的字符。

我的问题是,这只是我对SDL2_ttf的误解或已知问题,如果有,是否有任何已知的修复方法。

2 个答案:

答案 0 :(得分:0)

我最终使用了这个库,它似乎可以渲染所有内容。

https://github.com/akrinke/Font-Stash

答案 1 :(得分:0)

我偶然发现了一个骗局。如果您使用书呆子字体,例如签证unicode char(1F4B3)通常无法访问,但它们将其映射到FFFF以下。确切地说,我不确定,但您可以使用https://github.com/ryanoasis/nerd-fonts中的ttfs并在2个字节内获得良好的覆盖率。

相关问题