【独立开发者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、显示结果如下:


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


由于用到了icon同时根据上述头文件查找路径,我们需要在工程属性中添加下述路径:


参考博客:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值