我正在尝试使用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)时;它的工作原理是因为'ä'和'ö'是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, '\0'};
const char* char_pointer = char_array;
-61,-74是'ö'和-61,-97是'ß'。 这确实适合UTF8编码吗?
和256-74 = 182,这是B6
const char char_array [] = {0xC3,0xB6};
这个代码工作正常,以防你们有些人想知道。而且我认为这就是我现在要继续做的事情。查找某些Unicode字形的十六进制代码并不难。
但我仍然无法弄清楚如何获得246的扩展ASCII整数值。另外,对我的问题是否有一个更人性化的解决方案?
答案 0 :(得分:1)
如果源文件中包含非ASCII字符,则该源代码文件的字符编码很重要。因此,在文本编辑器或IDE中,您需要在保存时设置字符集(例如UTF-8)。
或者,您可以使用\ x ...或\ u ....格式仅使用ASCII字符指定非ASCII字符,因此源文件编码无关紧要。
Microsoft doc,但不是MS特定的: