cocos2d-x游戏中文乱码

来源:互联网 发布:网络游戏挂机软件 编辑:程序博客网 时间:2024/05/17 21:48

常见的字符编码有:

1.ASCII码是单字节编码,编码范围是0x00-0x7F(最高位保持为0)。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符,只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。

2.GB2312 是对 ASCII 的中文扩展,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统)按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了

3.Unicode,unicode是全世界统一的编码规则,但是这个只规定了各种字符的数字编码(相当于一种标准),具体实现的存储方式有utff-8,utf-16,utf-32等形式。各种形式有不同的存储和与unicode代码的映射规则。

现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的,在软件运行时根据当时的 Locale/Lang/Codepage 设置确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换,甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。

 

通常android手机和ipone手机上显示中文采用的编码是Unicode(UTF-8 带签名)

所以要想中文字体在手机上面显示需要把字符设置成Unicode(UTF-8 带签名),方法如下(vs2010):

1.选中字符所在的文件,

2,选择“文件”菜单

3.选择“高级保存选项” ,然后可以设置该文件的字符编码了。

 

如果把字符编码设置成 Unicode(UTF-8 带签名),那么在vs2010中运行游戏,发现中文显示乱码了

为什么?那是因为vs2010用的编码方式是GB2321,这时我们需要把Unicode编码转换成为GB2312编码

 怎么呢,首先:定义wstring或者wchar_t,比如:static const wstring W_GAMEOVER_TITLE = L"数据统计";
static const wchar_t* W_KILL_LABEL = L"本局杀死敌人数: %d人";

注意:wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。

std::string UTF8TOGBK(const wstring& text)
{

 int asciisize = WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), NULL, 0, NULL, NULL);
 if (asciisize == ERROR_NO_UNICODE_TRANSLATION ||
  asciisize == 0) 
 { 
  return string();
 }
 char* resultstring = new char[asciisize];
 int convresult = WideCharToMultiByte(CP_UTF8, 0, text.c_str(), text.size(), resultstring, asciisize, NULL, NULL);
 if (convresult != asciisize)
 { 
  return string();
 } 
 std::string buffer(resultstring, convresult);
 delete[] resultstring;
 return buffer;
}