我目前正在学习NeHe教程第43课( http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43)。该代码仅适用于英文文本,而不是统一的语言。幸运的是,我遵循了从NeHe第43课到tutorial.html的链接,并找到了另一个相同的教程示例,只有一个不同之处:它使用w_char,该站点声称您可以在英语以外的语言上运行。
所以我试试看:
freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1);
名称空间freetype的函数打印有第四个参数:*const未签名短**,所以我输入了它。我还在长字符的双引号字符串前面加上了一个L,并在测试中加入了一些亚洲字符。
结果是所有的英文文本都可以很好地显示,但是所有的泰国字符都变成了“[]B[]I[]5 H[]8”。这些[]是方框。据我所知,这意味着字体没有指定的语言,所以我尝试了其他字体,但是所有其他泰国字体都提供了相同的方框。对于日文字体来说,是一样的。所有的盒子和一些英语字符在他们旁边。在没有任何问题的情况下,子字符串就变得很好了。
我是不是忘了什么?我们如何在这里显示非英语Unicode语言?
发布于 2010-02-09 06:43:26
幸运的是,作者在他的网站上上传了一个修改后的教程版本(在问题中具体说明),它使用了wchar_t (在原始版本中,作者使用*const未签名的简短**作为打印函数中的一个参数),它允许使用非英语语言。
发布于 2010-02-08 14:28:20
看起来,第43课中的print()甚至都不能接近Unicode。NeHe所做的就是为前256个ASCII字符创建256个显示列表,不接受UTF8字符串并将其转换为UTF32 for FreeType。
将这音译为C++对我很有帮助。
另外,获取GNU Unifont的一个副本,以确保所有BMP都有象形文字。
https://stackoverflow.com/questions/2219952
复制相似问题