前一篇博文说了。在cocos2dx中怎么样使用iconv转码,这节我们将上一节中写的转码函数,做成一个lua接口。在lua脚本中使用。
网上能够下载到luaconv。可是编译的时候总是报错,所以自己写了一接口。
一 加入lua接口文件
// luaiconv.h
#ifndef __LUA_ICONV_H__ #define __LUA_ICONV_H__ #include "tolua++.h" #include "tolua_event.h" #include "lauxlib.h" #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 #include "iconv.h" #elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS #include <iconv.h> #elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID #include "iconv.h" #endif int tolua_iconv_open(lua_State *L); #endif
//luaiconv.cpp
#include "luaiconv.h"
#include <stdlib.h>
#define MAX_STRING_SIZE 1024
#define TEST_STR ("Hello, 这是个转码測试字符串")
bool iconv_convert(void *src, unsigned int src_len,char *src_charset, void *dest, unsigned int dest_len, char *dest_charset)
{
const char *in;
char *out,*dest_ptr;
size_t in_left,out_left,mutant,converted;
in_left = src_len;
out_left = dest_len;
in = (char *)src;
out = dest_ptr = (char *)dest;
iconv_t oConv=iconv_open(dest_charset,src_charset);
if(oConv==(iconv_t)(-1)){
printf("XXXXXXXXXX ERROR: unable to open libiconv.
");
return false;
}
mutant = iconv(oConv, &in, &in_left, &out, &out_left );
iconv_close(oConv);
if(mutant == (size_t)(-1)){
printf("XXXXXXXXXX ERROR: unable to convert anything.
");
return false;
}
converted = dest_len - out_left;
dest_ptr[converted]='