gpt4 book ai didi

c++ - Windows 游戏 : UTF-8, UTF-16、DirectX 和 Lua

转载 作者:可可西里 更新时间:2023-11-01 09:41:48 24 4
gpt4 key购买 nike

我正在为学习目的开发一个 Windows 游戏(我正在学习 DirectX)。我希望它有 UTF 支持。

Reading this question我了解到windows使用的是wchar_t,也就是UTF-16。我希望我的游戏支持 Lua 脚本,并且 Lua doesn't really like Unicode much .. 它只是将字符串视为“字节流”;这对于 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 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) I我很确定它会很慢)
  3. 为每个 lua 字符串保留一个 UTF-16 拷贝;巨大的内存浪费,很难实现(当 UTF-16 字符串在 Lua 等中发生变化时保持最新)

最佳答案

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

关于c++ - Windows 游戏 : UTF-8, UTF-16、DirectX 和 Lua,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com