【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码有关问题解决
【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码问题解决
2、进行中文显示:
3、显示结果如下:


在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有时候也是为了更方便了。 目前有两种方案来解决这个问题: 1. 使用iconv,引擎也提供了这个库,不过只是win32平台,移植到android上还得自己去下载iconv库编译。 2. 把字符串写到xml文件中,然后解析xml文件,格式按照android中的strings.xml 本文采用第一种方式解决。 下面来看具体的实现:
1、在工程中添加下述代码:
#ifdef WIN32 #define UTEXT(str) GBKToUTF8(str) #else #define UTEXT(str) str #endif #ifdef WIN32 #include "icon/include/iconv.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, 0, 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
2、进行中文显示:
CCMenuItemFont *itemFont1 = CCMenuItemFont::create(UTEXT("独立开发者er")); CCMenuItemFont *itemFont2 = CCMenuItemFont::create("独立开发者er"); CCMenu *menuTmp = CCMenu::create(itemFont1, itemFont2, NULL); menuTmp->alignItemsVerticallyWithPadding(10); menuTmp->setPosition(visibleSize.width/2+300, visibleSize.height/2+200); addChild(menuTmp);
3、显示结果如下:
4、结果分析:经过UTEXT装换的可以正常显示,没有经过转换的出现乱码。
由于用到了icon同时根据上述头文件查找路径,我们需要在工程属性中添加下述路径:
参考博客:
Cocos2dx中文乱码问题
Cocos2dx中中文乱码解决
版权声明:本文为博主原创文章,未经博主允许不得转载。