cocos2dx android乱码,cocos2dx的中文乱码

博主分享了在学习Cocos2d-x过程中遇到的乱码问题及其解决方案,主要涉及到编码转换宏的使用,以及如何通过配置文件管理字符串资源。文章还提到了在不同编码环境下进行转换的方法,并提供了代码示例。同时,介绍了如何利用配置文件加载资源,以实现类似Android SP的功能。
摘要由CSDN通过智能技术生成

最近2周才开始学习cocos2dx,先前由于一些原因一直没有写Blog,大多知识都知识记在笔记上面。现在也翻得不多,往后就blog上面了 省得每天都带着笔记。。

本人C++也是萌萌哒新人水平,看cocos2dx还是有一定的鸭梨的。先前很顺利搞完cocos2dx 2.2.1开发环境,按照TestCpp里面得代码,写了个小demo之后,就想着“都要进步的,为什么不去看新点的版本呢?”。于是去搞了cocos2dx-v3.6的开发环境,这一搞不要紧,一周多过去了,那个破环境还是好些坑!真是气死了。于是安安顿顿回来按照2.2.1先学着再说。

这篇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)就好啦。

其实,以上也不是自己写的啦,不过测试可用就是啦。

另外,为了软件国际化以及更好的管理我们的字符串资源,我们可以通过配置文件来管理。

在资源文件中新建一个plist文件(其实也是一种xml文件啦)

data

hello

YS尘笑的世界

cocos2d.x.display_fps

cocos2d.x.gl.projection

3d

cocos2d.x.texture.pixel_format_for_png

rgba8888

cocos2d.x.texture.pvrv2_has_alpha_premultiplied

Metadata

format

1

如果是要以配置文件方式去加载的话 在AppDelegate里面实例化CCDirector之前

//参数为资源目录下的相对路径

CCConfiguration::sharedConfiguration()->loadConfigFile("config/strings.plist");

调用的时候:

CCConfiguration *conf=CCConfiguration::sharedConfiguration();

然后就是愉快的getCString(key,default)了

感觉有点像Android里面的SP那样子。

结合起来,例子:

(头文件不要忘加喔~)

CCConfiguration *conf = CCConfiguration::sharedConfiguration();

CCLabelTTF* pLabel = CCLabelTTF::create(UTEXT(conf->getCString("hello","unknown")),"Marker Felt",24);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值