首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows游戏: UTF-8,UTF-16,DirectX和Lua。

Windows游戏: UTF-8,UTF-16,DirectX和Lua。
EN

Stack Overflow用户
提问于 2010-02-26 22:10:23
回答 4查看 2K关注 0票数 2

我正在开发一个用于学习的windows游戏(我正在学习DirectX)。我希望它能得到UTF的支持。

读这个问题我了解到windows使用wchar_t,这是UTF-16。我希望我的游戏有Lua脚本支持,和Lua不太喜欢Unicode..。它简单地将字符串视为“字节流”;这对于UTF-8非常有效,但是UTF-16实际上是不可能使用的。

长话短说: windows需要UTF-16,lua想要UTF-8。

所以我想,让我们用UTF-8和正常的char*string.length()会搞砸,但谁在乎呢?然而,它不起作用:

代码语言:javascript
运行
复制
const char test_utf8[] = { 111, 108, 0xc3, 0xa9, 0 }; // UTF-8 for olè
mFont->DrawTextA(0, test_utf8, -1, &R, DT_NOCLIP, BLACK);
    /* DrawText is a Direct3d function to, well, draw text.
     * It's like MessageBox: it is a define to either DrawTextA
     * or DrawTextW, depending if unicode is defined or not. Here
     * we will use DrawTextA, since we are passing a normal char*. */

这个打印olé。换句话说,它似乎不使用UTF-8,而是使用ISO-8859-1

那我能做什么呢?我可以想到以下几点:

  1. 放弃UTF的想法;使用ISO-8859-1并感到高兴(这是魔兽世界所做的,至少对于enUS版本是这样的)
  2. 将每一帧中的每一个字符串从UTF-8转换为UTF-16 (但我担心性能问题,考虑到它将对每一个字符串每秒执行60+一次,并且它是O(N),我很确定它会非常慢)
  3. 对于每个Lua字符串保持一个UTF-16副本;巨大的内存浪费,很难实现(当UTF-16字符串在lua中更改时保持最新,等等)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-26 22:15:19

它也不使用8859-1,它使用系统的本地代码页。您可以通过自己转换字符串来转换为UTF16并使用DrawText()。如果类库没有任何支持,那么可以使用MultiByteToWideChar()

票数 5
EN

Stack Overflow用户

发布于 2010-02-26 22:56:29

如果WoW不使用DirectX文本绘制方法,我不会感到震惊。有了您自己的自定义文本绘制解决方案,您就可以更灵活地支持编码。不太难。

票数 2
EN

Stack Overflow用户

发布于 2010-02-27 04:37:53

您可以让lua缓存您的转换到UTF-16。

代码语言:javascript
运行
复制
utf16 = setmetatable ( {} , { __index = function ( t , k , v )
        local utf16str = my_conversion_func_to_utf16 ( v )
        rawset ( t , k , utf16str )
        return utf16str
    end } )

然后,让所有函数只接受utf16字符串类型(可以是lua字符串,也可以是某种用户数据(可以是wchar_t数组))。

如果你不明白我能帮上更多忙..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2345191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档