【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码问题解决

在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、显示结果如下:
【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码问题解决_第1张图片

4、结果分析:经过UTEXT装换的可以正常显示,没有经过转换的出现乱码。


由于用到了icon同时根据上述头文件查找路径,我们需要在工程属性中添加下述路径:
【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码问题解决_第2张图片

参考博客:
Cocos2dx中文乱码问题
Cocos2dx中中文乱码解决

你可能感兴趣的:(中文乱码,iconv,cocos2dx,中文乱码问题解决,iconv使用,独立开发者er)