求助:关于lua本身的一些应用,非wow相关
rt想知道有没有什么lua lib可以实现unicode 和ansi(multibyte)的转换。
因为我现在在改写一个mud机器人呢的脚本文件,准备移植为lua的
但是这个脚本文件用到了com对象来处理数据
而windows里com对象返回的值都是unicode的
无法在以ansi为标准的lua里处理
所以想问问有没有这样的lib, 可以进行unicode/ansi转换或者调用win32api unicodetomultibyte 和multibytetounicode 进行转换。 [url]http://lua-users.org/wiki/LuaUnicode[/url] 这里可能会有一些帮助
不过简单看了一下,貌似Lua是支持Unicode的…… cosin0002 对这部分有研究, 你找他交流下. 那个基本没用
那个是说lua 可以储存uni对象
我想要的是不同内码的转换,类似于python的string.encode 和string.decode。
我还是研究下怎么做个lua 的扩展库吧 [url]http://article.mmbest.com/article/9/2006/2006071617524.html[/url]
Google 很好,很强大。。。要善用 我当然知道哪两个api可以转换-____-
问题是1。怎么在lua内调用这两个api
2.lua没有api中所提到的那些类型,如何把参数传给这些api [quote]原帖由 [i]白天睡觉[/i] 于 2007-10-22 14:35 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=25265&ptid=2266][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
我当然知道哪两个api可以转换-____-
问题是1。怎么在lua内调用这两个api
2.lua没有api中所提到的那些类型,如何把参数传给这些api [/quote]
如果你仔细看了代码,你不会问这些问题
如果什么都要现成的,你不该来这个版块 [quote]原帖由 [i]cosin0002[/i] 于 2007-10-23 07:06 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=25348&ptid=2266][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
如果你仔细看了代码,你不会问这些问题
如果什么都要现成的,你不该来这个版块 [/quote]
你列出的这个帖子,我在你贴出来前就已经看过了。
我连lua的maillist里和这个问题有关的也都爬过了。
我只是要解决我在lua里调用com对象后的返回值的编码问题。
我想我在我顶楼的帖子里对我提出的问题也做了个详尽的说明了。
我平时是用ub的,对win下用c调用windows api做个lua库实在是不怎么熟悉。
如果不适合出现在这里,那真的抱歉了。 [language=c]
int AnsiiToUnicodeString(char *pOutBuffer, char *pInBuffer )
{
S16 count = -1;
int charLen = 0;
int arrOut[2];
while( *pInBuffer != '\0')
{
UnicodeToUCS2Encoding(int *pInBuffer,&charLen,arrOut);
//#ifdef MMI_ON_WIN32
pOutBuffer[++count] = arrOut[0];
pOutBuffer[++count] = arrOut[1];
pInBuffer++;
//#endif
}
pOutBuffer[++count] = '\0';
pOutBuffer[++count] = '\0';
return count + 1;
}
int UnicodeToUCS2Encoding(int unicode,int *charLength,int *arrOut)
{
int status = ST_SUCCESS;
int index = 0;
//#ifdef MMI_ON_WIN32
if(arrOut != 0)
{
if( unicode < 256 )
{
arrOut[index++] = *((int*)(&unicode));
arrOut[index] = 0;
}
else
{
arrOut[index++] = *((int*)(&unicode));
arrOut[index] = *(((int*)(&unicode)) + 1);
}
*charLength = 2;
}
else
{
status = ST_FAILURE;
}
//#endif
return status;
}[/language]
上面的代码有用到任何的API了么。。。
至于 USC2 => UTF8 或者其他转换,参考:
[quote]原帖由 cosin0002 于 2007-10-22 11:11 发表
Google 很好,很强大。。。要善用 [/quote] 1.您难道想叫我在lua里逐个处理字符串……
2.我问的是unicode->ansi,在我们的中文win系统就是unicode->gb2312的转换,也就是您贴出的链接的 “使用 MultiByteToWideChar 这个API函数就可以的!”以及"因此如果要将UNICODE和ANSI相互转换,就必须首先知道ANSI代码页(一个数字ID),否则是没有意义的。在Win32平台上系统提供了编码转换函数,MultiByteToWideChar(ANSI->UNICODE)或者WideCharToMultiByte(UNICODE- >ANSI),都有一个参数用来指明当前代码页。 "。
您那个代码和我的问题实在没有任何关系 [quote]原帖由 [i]白天睡觉[/i] 于 2007-10-25 15:32 发表 [url=http://bbs.cwowaddon.com/redirect.php?goto=findpost&pid=25708&ptid=2266][img]http://bbs.cwowaddon.com/images/common/back.gif[/img][/url]
1.您难道想叫我在lua里逐个处理字符串……
2.我问的是unicode->ansi,在我们的中文win系统就是unicode->gb2312的转换,也就是您贴出的链接的 “使用 MultiByteToWideChar 这个API函数就可以的!”以及"因此如果要将UNICOD ... [/quote]
lua 不是 windows,因此你需要自己实现,具体的来说,就是在 lua 里逐个处理字符串
很不幸并没有什么 api 可以使用,如果你觉得太麻烦,请使用别的语言
至于 ansi => usc2 上面有代码了,其他的请搜索Google
[quote]假设我给出的连接或者代码样本对你没有任何帮助,抱歉浪费你的时间了[/quote] 您那段代码根本不能用,对不起。我想您是否完整看过你给出的那个链接?
我想既然我能在lua里使用windwos activex的com对象,也没什么api不能用了吧。
我想我可能是浪费您时间了,sorry。
页:
[1]