在 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(font, "Hällö", font_clr);它之所以有效,是因为 'ä' 和 'ö' 是 8 位扩展 ASCII 编码的,但我想要的是 UNICODE 支持,所以这无济于事。

编辑 & Semi-Solution

我有点(不太好)解决了这个问题,因为我的输入工作正常,我只是检查了当我在键盘上使用以下代码:

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, '[=13=]'};
const char* char_pointer = char_array;

-61、-74 是 'ö' 和 -61、-97 是 'ß'。 这适合 UTF8 编码吗?

如果你们中的一些人想知道,这段代码也可以正常工作。我认为这是我现在会继续做的事情。查找一些 Unicode 字形的 Hex-code 并不难。

但我仍然想不通的是如何得到扩展的 ASCII 整数值 246。另外,难道没有更多 human-friendly 解决我的问题的方法吗?

如果源文件中有非 ASCII 字符,则该源代码文件的字符编码很重要。所以在你的文本编辑器或IDE中,你需要在保存时设置字符集(例如UTF-8)。

或者,您可以使用 \x... 或 \u.... 格式指定仅使用 ASCII 字符的非 ASCII 字符,因此源文件编码无关紧要。

Microsoft 文档,但不是特定于 MS 的:

https://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx