繁体   English   中英

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

[英]Is SDL2_ttf incapable of rendering characters that are longer than two bytes?

我正在程序中从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的误解还是已知的问题,如果有的话,是否有任何已知的修复方法。

我最终使用这个库,它似乎渲染了应有的一切。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM