cocos2d-x 2.1开发中有关中文乱码的解决方案

cocos2d-x默认只认识UTF-8编码(这是我的理解),所以

1.从服务器端读取的数据,务必是UTF-8的数据

2.VS2010文件里开发的cpp或h文件,里边如果包含中文,必须保存成UTF-8 with signature ,具体方法为在Solution Explorer里选中文件,点击左上角的File->Advanced Save Options,里边有相应的选择,VS2010里,第二个便是,然后确定,再ctrl+s保存,这个文件就变成UTF-8格式的文件了。之后如果编译生成android项目的话,android手机里就可以正常显示中文字符了,比如CCLabelTTF里的中文字符。但是运行win32程序,确还是乱码。这一点真是百思不得其解。这说明中文编码格式在VS2010里还是GBK,所以只能借助转码方法了,也就是GBKToUTF8了,参考网址:http://blog.csdn.net/p569354158/article/details/6567175,里边的GBKToUTF8方法是可以用的,但是下一个好像编译不过去。还有一个转码方式参考网址如下:http://my.huhoo.net/archives/2012/10/gbkutf8.html,我暂时用的是第二个,所以粘出部分代码:在工具类Utils里

#include "cocos2d.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "strnormalize.h"
#endif


class Utils
{
public:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
static char* GBKToUTF8(const char* strGBK);
static char* UTF8ToGBK(const char* strUTF8);
#endif
// 其余方法


private:

};

strnormalize.h为上述网址源码文件,直接放到工程里即可。

Utils.cpp文件部分代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
char* Utils::GBKToUTF8(const char* strGBK)
{
str_normalize_init();
uint32_t newlen = strlen(strGBK) * 3 + 1;
char *newbuffer = (char *)malloc(newlen);
memset(newbuffer, 0, newlen);
gbk_to_utf8(strGBK, strlen(strGBK), &newbuffer, &newlen);
return newbuffer;
}

#endif

这样,方法就配置好了。可以在别处使用了。

char* chToolCount = (char*)TOOLNAME;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
chToolCount = Utils::GBKToUTF8(TOOLNAME); // 本地汉字为GBK字符集,转成UTF-8
#endif

切记if包含的部分是不能用在android端的,所以变量的读取一定不要弄乱,并且if包含的代码并不影响上下文,说白了,就是不管是不是在CC_PLATFORM_WIN32下,都要保证编译正确及运行时正确。这样就能兼容至少两个平台了。

写到这里,基本就没什么问题了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值