http://momowing.diandian.com/post/2013-01-16/40047183777 Jetion: 我们在win32下创建类的时候,文件都是默认的ANSI的式,如果你使用了中文,那么你在win32下就会看到乱码。当然,移植Android的时候,你把文件式改为UTF-8即可。 但是为了方便win32下的调试
Jetion:
我们在win32下创建类的时候,文件都是默认的ANSI的格式,如果你使用了中文,那么你在win32下就会看到乱码。当然,移植Android的时候,你把文件格式改为UTF-8即可。
但是为了方便win32下的调试,也为了省事点,我们需要一种方法能直接在win32和Android下显示中文的,这时候我们就需要用到iconv库的,cocos2d-x自带第三方库iconv。
在需要用到的地方,我们只要这么声明就可以:
#include "platform\third_party\win32\iconv\iconv.h"
#pragma comment(lib,"libiconv.lib")
或者在VS中这么处理:
当然还是得加上
#include "platform\third_party\win32\iconv\iconv.h"
这样子你就能引用cocos2d-x中自带的iconv库了。
但是当你移植到Android的时候,也许你正在使用cygwin编译,然后发现它报了:
convert_open等方法没找到的错误, 因为Android手机上面是不带这个库的,所以你没法找到相关的方法。
这时候我能想到的就是自己去搞一个iconv库来编译到Android上面使用了。
首先 :你要去网上下一个iconv库,这边我给出我用的iconv库,虽然不能保证都能用,但是至少我在Android2.3上面是没问题的。下载链接
或许你也可以在网上找到合适的iconv库。
其次 :把iconv库解压放到cocos2d-x的根目录下
然后 :修改你Android的mk。这里也给出mk的添加代码,如下:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/HelloWorld/proj.win32 \
$(LOCAL_PATH)/HelloWorld/Classes \
$(LOCAL_PATH)/iconv \
$(LOCAL_PATH)/iconv/include \
$(LOCAL_PATH)/iconv/libcharset \
$(LOCAL_PATH)/iconv/libcharset/lib \
$(LOCAL_PATH)/iconv/libcharset/include
LOCAL_WHOLE_STATIC_LIBRARIES := iconv cocos2dx_static cocosdenshion_static cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,iconv)
最后 :给出转换为UTF-8的格式的代码,如下:
int DataController::code_convert( const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen )
{
iconv_t cd;
const char *temp = inbuf;
const char **pin = &temp;
char **pout = &outbuf;
memset (outbuf,0,outlen);
cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
/*UTF8 To GB2312*/
string DataController::u2a( const char *inbuf )
{
size_t inlen = strlen (inbuf);
char * outbuf = new char [inlen * 2 + 2];
string strRet;
if (code_convert( "utf-8" , "gb2312" , inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
{
strRet = outbuf;
}
delete [] outbuf;
return strRet;
}
/*GB2312 To UTF8*/ //使用中文时用该函数转换
string DataController::a2u( const char *inbuf )
{
size_t inlen = strlen (inbuf);
char * outbuf = new char [inlen * 2 + 2];
string strRet;
if (code_convert( "gb2312" , "utf-8" , inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
{
strRet = outbuf;
}
delete [] outbuf;
return strRet;
}
PS: 链接无法直接点击下载的话,请使用右键->迅雷下载
查看更多关于Cocos2d-x对于中文的支持-----iconv库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did98934