cocos2dx的中文乱码
最近2周才开始学习cocos2dx,先前由于一些原因一直没有写Blog,大多知识都知识记在笔记上面。现在也翻得不多,往后就blog上面了 省得每天都带着笔记。。 这篇Blog主要就记一下目前我是怎么解决乱码问题的吧。 乱码问题很常见,通常都是因为中文编码集不一致。一般都统一成UTF-8,而VS默认编码集为gbk,windows 下 eclipse什么的里面都默认是gbk。所以定义一个宏用于转码: //需要用到libiconv.lib,在项目的依赖附加项里加上。
#ifdef WIN32
#define UTEXT(str) GBKToUTF8(str)
#else
#define UTEXT(str) str
#endif
#ifdef WIN32
#include "platform/third_party/win32/iconv/iconv.h"
#include "string.h"
#include "malloc.h"
static char g_GBKConvUTF8Buf[5000] = {0};
const char* GBKToUTF8(const char *strChar)
{
iconv_t iconvH;
iconvH = iconv_open("utf-8","gb2312");
if (iconvH == 0)
{
return NULL;
}
size_t strLength = strlen(strChar);
size_t outLength = strLength<<2;
size_t copyLength = outLength;
memset(g_GBKConvUTF8Buf,0,5000);
char* outbuf = (char*) malloc(outLength);
char* pBuff = outbuf;
memset( outbuf,outLength);
if (-1 == iconv(iconvH,&strChar,&strLength,&outbuf,&outLength))
{
iconv_close(iconvH);
return NULL;
}
memcpy(g_GBKConvUTF8Buf,pBuff,copyLength);
free(pBuff);
iconv_close(iconvH);
return g_GBKConvUTF8Buf;
}
#endif
调用的时候只需要调用UTEXT(str)就好啦。 另外,为了软件国际化以及更好的管理我们的字符串资源,我们可以通过配置文件来管理。 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>data</key>
<dict>
<key>hello</key>
<string>YS尘笑的世界</string>
<key>cocos2d.x.display_fps</key>
<true/>
<key>cocos2d.x.gl.projection</key>
<string>3d</string>
<key>cocos2d.x.texture.pixel_format_for_png</key>
<string>rgba8888</string>
<key>cocos2d.x.texture.pvrv2_has_alpha_premultiplied</key>
<false/>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>1</integer>
</dict>
</dict>
</plist>
如果是要以配置文件方式去加载的话 在AppDelegate里面实例化CCDirector之前 //参数为资源目录下的相对路径
CCConfiguration::sharedConfiguration()->loadConfigFile("config/strings.plist");
调用的时候: CCConfiguration *conf = CCConfiguration::sharedConfiguration();
然后就是愉快的getCString(key,default)了 结合起来,例子: CCConfiguration *conf = CCConfiguration::sharedConfiguration();
CCLabelTTF* pLabel = CCLabelTTF::create(UTEXT(conf->getCString("hello","unknown")),"Marker Felt",24);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |