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下,都要保证编译正确及运行时正确。这样就能兼容至少两个平台了。
写到这里,基本就没什么问题了。