在SDL_ttf中使用UTF8渲染字体
Rendering font with UTF8 in SDL_ttf
我正在尝试使用SDL_ttf库提供的TTF_RenderUTF8_Blended
方法来渲染字符。我实现了用户输入(键盘),例如按"ä"或"ß"效果很好。这些是德语的特殊字符。在这种情况下,它们甚至在扩展的ASCII 8位代码中,但即使当我复制和粘贴一些希腊字母时,字体也会使用UTF8正确呈现。(但并非所有您可以在此处找到的UNICODE字形(http://unicode-table.com/)我是否能够按照测试中识别的方式进行渲染,但我想这很正常,因为Arial字体可能没有每个字形。无论如何,大多数UNICODE字形都可以正常工作。)
我的问题是传递字符串(参数为const char*
)和附加字符(到ASCII)时没有正确呈现。因此,在运行时用键盘输入"É"、"ß"或其他UNICODE字符是有效的,但将它们作为参数传递到代码中(比如说我的游戏标题)是不起作用的:
font_srf = TTF_RenderUTF8_Blended(font, "Hällö", font_clr);
我真的不明白为什么会发生这种事。我在屏幕上看到的是:
H_ll_
我用_来表示典型的垂直矩形,下面演讲的人用它作为一种有趣的介绍方式:https://www.youtube.com/watch?v=MW884pluTw8
具有讽刺意味的是,当我使用TTF_RenderText_Blended(字体,"Hällö",font_clr)时;它之所以有效,是因为"ä"answers"ö"是8位扩展ASCII编码,但我想要的是UNICODE支持,所以这没有帮助。
编辑&半解决方案
我有点(不是很好)解决了这个问题,因为我的输入很好,我只是检查了当我按"ä"、"ß"时我得到的输入值。。。在我的键盘上使用以下代码:
const char* c = input.c_str();
for (int i = 0; i < input.length(); i++)
{
std::cout << int(c[i]) << " ";
}
然后我用以下方式打印这些字符:
const char char_array[] = {-61, -74, -61, -97, ' '};
const char* char_pointer = char_array;
-61,-74是"ö",-61,-97是"ß"。这确实适合UTF8编码,对吗?
- U+00F6|ö|C3 B6(来自UTF8数据表)
- 256-61=195为C3
256-74=182为B6
const char char_array[]={0xC3,0xB6};
这段代码也能很好地工作,以防您中的一些人感到疑惑。我想这就是我现在要继续做的事情。查找某些Unicode字形的十六进制代码并不难。
但我仍然不知道如何获得246的扩展ASCII整数值。另外,难道没有一个更人性化的解决方案来解决我的问题吗?
如果源文件中有非ASCII字符,那么该源代码文件的字符编码很重要。因此,在文本编辑器或IDE中,保存时需要设置字符集(例如UTF-8)。
或者,您可以使用\x。。。或\u。。。。格式来指定仅使用ASCII字符的非ASCII字符,所以源文件编码无关紧要。
Microsoft文档,但不是特定于MS的:
https://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx
- 在C++中测量postscript字体宽度
- 如何在Directwrite中获得给定字体的可用OpenType功能
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- C++MySQL连接器没有utf8
- SetCurrentConsoleFontEx() 不适用于自定义安装的字体
- C++ wxWidgets:在创建小部件后设置字体
- C++ wxWidgets:更改大小器的字体
- C++ 位图中的 ttc 字体
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?Qt C++
- 更改 Windows GUI 中静态文本框的字体大小
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何获取控制面板设置值,如字体大小
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- 使用 TTF_RenderText() 加载字体时获取段错误 TTF_OpenFontRW()
- 通知 Windows 系统应用程序字体已被卸载/删除
- Libharu 中的 UTF8:嵌入字体真的有必要吗?
- 在SDL_ttf中使用UTF8渲染字体