【问题标题】:sdl ttf windows-1250 encodingsdl ttf windows-1250 编码
【发布时间】:2014-09-14 18:43:22
【问题描述】:

在文件 text.txt 我有这个句子:

“Příliš žluťoučký kůň úpěl ďábelské ódy。”

(我认为 Windows 使用 Windows-1250 代码页来表示此文本。)

在我的程序中,我将其保存到缓冲区中

char string[1000]

并使用 ttf 将字符串渲染到 SDL_Surface *surface

surface = TTF_RenderText_Blended(font, string, color);
/*(font is true type and support this text)*/

但它给了我不正确的结果:

我需要一些声望点来发布图片 所以我只能描述 ř,í,š,ž,ť,ů,ň,ď 显示不正确。

可以用ttf正确渲染这句话吗?

(我也试过 TTF_RenderUTF8_Blended、TTF_RenderUNICODE_Solid... 结果更糟。)

【问题讨论】:

  • 看起来像通常的 8 位编码痛苦。错误的代码页,假定为 ISO-8859-1,但它不能很好地处理捷克语,不支持 Č, č, Ř, ř, Š, š, Ž, ž, ch。您最好回退到 utf-8,确保告诉您的文本编辑器使用该编码保存文件。
  • 我有我的 UTF-8 文件并调用 RenderUTF8。它不起作用。仍然是坏符号。

标签: c encoding sdl sdl-ttf


【解决方案1】:

TTF_RenderText_Blended 的文档说它需要一个 Latin-1 字符串 (Windows-1252) - 这就是它不起作用的原因。

您需要将输入文本转换为 UTF-8 并使用 RenderUTF8,或转换为 UTF-16 并使用 RenderUNICODE 以确保正确解释。

如何执行此操作取决于您的应用所针对的平台 - 如果是 Windows,那么最简单的方法是使用 MultiByteToWideChar Win32 API 将其转换为 UTF-16,然后使用 TTF_RenderUNICODE_Blended 绘制它。

【讨论】:

  • 我有我的 UTF-8 文件并调用 RenderUTF8。如果它不是 SDL 或 TTF 库的一部分,它不会t work. Still bad symbols. I dont 想要使用 Win32 API 函数。
【解决方案2】:

我的解决方案是这样的:

三个输入文件。在第一个文件中会有一组来自捷克字母的符号。 第二个文件将是精灵位图文件,其中图形符号将在 与第一个文件中的顺序相同。在我的程序中,来自第三个输入文件的符号将与来自第一个文件的符号进行比较,精灵的右侧部分将一个一个地复制到屏幕上。

我将省略 sdl_ttf。它有一些优点和缺点,但我认为它适用于我的目的。

感谢所有回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 2017-12-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多