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 个字节内获得良好的覆盖范围。
相关文章:
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 在编译时而不是运行时创建一个由两个字节组成的值
- 在"C++代码"部分中,可能会写入两个字节
- 如何封装两个容器之间的传输字节
- 包含消息长度的两个字节标头上的部分recv()呢?
- 如何分别通过 QSslSocket 发送两个字节
- 在java中将两个字节(一个正字节和另一个负字节)合并为短字节
- SDL2_ttf无法呈现长度超过两个字节的字符吗?
- 一次读取两个字节的.dat文件
- C++两个字节上写一个数字
- 如何将 BYTE 数组中的两个字节存储为 int(或类似的东西)
- 将两个字节放在一起
- 如何将两个字节*(秒块)与运算符连接起来'secblock<T, A>::operator+='
- Arduino将整数发送为两个字节,并将其显示在Qt中
- 两个字节合一
- 将单词拆分为两个字节的最快方法
- QByteArray::number(int)只有两个字节长
- 使用std::copy将char数组中的两个字节复制到无符号short中
- 将两个字节转换为16位值的最有效方法
- 为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节