Windows游戏:UTF-8、UTF-16、DirectX和Lua
2017-5-23 11:48:22
收藏:0
阅读:257
评论:4
我正在开发一个Windows游戏来学习(我正在学习DirectX),我想让它支持UTF。
通过阅读这个问题,我了解到Windows使用 wchar_t
,它是UTF-16。我想要我的游戏支持Lua脚本,并且Lua不太喜欢Unicode。它只是将字符串视为“字节流”;这对于UTF-8来说已经足够好了,但是UTF-16几乎不可能使用。
长话短说:Windows想要UTF-16,Lua想要UTF-8。
所以我想,就使用正常的 char *
和string
来使用UTF-8!.length()
可能会被弄乱,但谁在乎呢?但是它不起作用:
const char test_utf8[] = { 111,108,0xc3,0xa9,0 }; // UTF-8 for olè
mFont->DrawTextA( 0, test_utf8, -1, &R, DT_NOCLIP, BLACK );
/* DrawText是一个Direct3d函数,用于绘制文本。 它类似于MessageBox:
* 它是一个定义为DrawTextA或DrawTextW,取决于是否定义了Unicode。
* 这里我们将使用DrawTextA,因为我们传递了普通char *。*/
这将打印出olé
。换句话说,它似乎并没有使用UTF-8,而是使用ISO-8859-1。
那我该怎么办呢?我可以考虑以下几点:
- 放弃UTF的想法;使用ISO-8859-1并感到高兴(这至少是World of Warcraft的enUS版本所做的)
- 在每个帧中将每个字符串从UTF-8转换为UTF-16(我担心性能问题,因为它将对每个字符串每秒执行60次以上,并且它是O(N),我非常确定它会相当缓慢)
- 对于每个Lua字符串保留一个UTF-16副本;浪费大量内存,难以实现(在Lua中更改时保持UTF-16字符串最新等)
原文链接 https://stackoverflow.com/questions/2345191
点赞
stackoverflow用户149391
将下面翻译成中文并且保留原本的 markdown 格式,
ÕœêµÂì–´/ì¡°ì„ ë§. 在星际争霸中我经常发现这个问题,因为它不支持Unicode。
要做好UTF-8。每一帧都要转换为UTF-16(除非有更好的方法在文档中提到,但我太懒了不想去看)。在性能不成问题之前不要过分担心性能问题!
2010-02-26 22:16:09
stackoverflow用户5243
我不会感到惊讶,如果 WoW 不使用 DirectX 文字绘制方法。拥有自己的定制文本绘制解决方案可以让您在支持编码方面获得更多的灵活性。这并不难。
2010-02-26 22:56:29
stackoverflow用户282536
你可以让 Lua 缓存你的 UTF-16 转换。
utf16 = setmetatable( {}, { __index = function ( t , k , v )
local utf16str = my_conversion_func_to_utf16 ( v )
rawset ( t , k , utf16str )
return utf16str
end } )
然后,使你所有的函数都只接受 UTF-16 字符串类型(可以是 Lua 字符串或某种类似于 wchar_t 数组的用户数据)。
如果你不理解,我可以提供更多帮助...
2010-02-27 04:37:53
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
它也不使用8859-1,而是使用您系统的本地代码页。您可以通过自行转换字符串将其转换为UTF16并使用DrawText()。如果您的类库没有任何支持,则可以使用[MultiByteToWideChar()] (http://msdn.microsoft.com/en-us/library/dd319072%28VS.85%29.aspx)。