我正在开发一个用于学习的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()
会搞砸,但谁在乎呢?然而,它不起作用:
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。
那我能做什么呢?我可以想到以下几点:
发布于 2010-02-26 22:15:19
它也不使用8859-1,它使用系统的本地代码页。您可以通过自己转换字符串来转换为UTF16并使用DrawText()。如果类库没有任何支持,那么可以使用MultiByteToWideChar()。
发布于 2010-02-26 22:56:29
如果WoW不使用DirectX文本绘制方法,我不会感到震惊。有了您自己的自定义文本绘制解决方案,您就可以更灵活地支持编码。不太难。
发布于 2010-02-27 04:37:53
您可以让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 } )
然后,让所有函数只接受utf16字符串类型(可以是lua字符串,也可以是某种用户数据(可以是wchar_t数组))。
如果你不明白我能帮上更多忙..。
https://stackoverflow.com/questions/2345191
复制相似问题