我在我的程序中从 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 的已知问题,如果是,是否有任何已知的修复方法。
最佳答案
我最终使用了这个库,它似乎可以按预期呈现所有内容。
关于c++ - SDL2_ttf 是否无法呈现超过两个字节的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598539/