cocos2d-x 3.1.1 step by step 学习笔记3 Win32平台下中文乱码问题
2014-07-19 20:58
603 查看
对于cocos2d-x来说,在windows平台下,默认的是GBK编码格式的,他的源文件默认编码
也是GBK编码的,如果源程序当中有中文,它的字符集是GBK的,这是我们要把它转换为utf-8编
码格式的。
第一种方法
把源文件保存为UTF-8的格式
![](http://img.blog.csdn.net/20140719204506421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGpiMTAwMzE2ODc4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在下拉列表当中选择utf-8 无签名格式的保存源文件
使用这种方法解决问题,还是不能完全解决,一般中文的最后一个字出现不了,但是中文后面最后一个字是“啊”
的时候可以全部出来,但是很多的时候我们不一定要这个字
第二种方法:
转码GBK----->UTF-8:
//在Win32平台下,将GBK编码转换为UTF-8
string MyUtility::gbk_2_utf8(const string text)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
//采用Lambda表达式,将string转换成wstring
wstring tes = [=]() {
setlocale(LC_ALL, "chs");
const char* _Source = text.c_str();
size_t _Dsize = text.size() + 1;
wchar_t *_Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest,_Source,_Dsize);
std::wstring result = _Dest;
delete []_Dest;
setlocale(LC_ALL, "C");
return result;
}();
int asciSize = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),NULL,0,NULL,NULL);
if (asciSize == ERROR_NO_UNICODE_TRANSLATION || asciSize == 0)
{
return string();
}
char *resultString = new char[asciSize];
int conveResult = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),resultString,asciSize,NULL,NULL);
if (conveResult != asciSize)
{
return string();
}
string buffer = "";
buffer.append(resultString,asciSize);
delete[] resultString;
return buffer;
#else
return text;
上面这段代码直接拷贝的关东升老师的,一般直接用就可以,引入这个后,在自己的文件当中:
__String* ns = __String::create("大家好");
const char* cns;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
std::string sns = MyUtility::gbk_2_utf8(ns->getCString());
cns = sns.c_str();
#else
cns = ns->getCString();
#endif
采用的都是条件编译,如果是Win32平台,就实现转码。
第三种方法:
使用XML文件,具体怎么用,现在还不会,希望以后学会。
也是GBK编码的,如果源程序当中有中文,它的字符集是GBK的,这是我们要把它转换为utf-8编
码格式的。
第一种方法
把源文件保存为UTF-8的格式
在下拉列表当中选择utf-8 无签名格式的保存源文件
使用这种方法解决问题,还是不能完全解决,一般中文的最后一个字出现不了,但是中文后面最后一个字是“啊”
的时候可以全部出来,但是很多的时候我们不一定要这个字
第二种方法:
转码GBK----->UTF-8:
//在Win32平台下,将GBK编码转换为UTF-8
string MyUtility::gbk_2_utf8(const string text)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
//采用Lambda表达式,将string转换成wstring
wstring tes = [=]() {
setlocale(LC_ALL, "chs");
const char* _Source = text.c_str();
size_t _Dsize = text.size() + 1;
wchar_t *_Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest,_Source,_Dsize);
std::wstring result = _Dest;
delete []_Dest;
setlocale(LC_ALL, "C");
return result;
}();
int asciSize = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),NULL,0,NULL,NULL);
if (asciSize == ERROR_NO_UNICODE_TRANSLATION || asciSize == 0)
{
return string();
}
char *resultString = new char[asciSize];
int conveResult = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),resultString,asciSize,NULL,NULL);
if (conveResult != asciSize)
{
return string();
}
string buffer = "";
buffer.append(resultString,asciSize);
delete[] resultString;
return buffer;
#else
return text;
上面这段代码直接拷贝的关东升老师的,一般直接用就可以,引入这个后,在自己的文件当中:
__String* ns = __String::create("大家好");
const char* cns;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
std::string sns = MyUtility::gbk_2_utf8(ns->getCString());
cns = sns.c_str();
#else
cns = ns->getCString();
#endif
采用的都是条件编译,如果是Win32平台,就实现转码。
第三种方法:
使用XML文件,具体怎么用,现在还不会,希望以后学会。
相关文章推荐
- Cocos2d-x 3.1.1 学习日志4--cocos2d-x解决中文乱码问题的几种办法
- cocos2d-x 3.1.1 step by step 学习笔记4 标签使用
- cocos2d-x 3.1.1 step by step 学习笔记5 菜单使用
- Cocos2d-x 3.1.1 学习日志4--cocos2d-x解决中文乱码问题的几种办法
- cocos2d-x 3.1.1 step by step 学习笔记7 场景与层
- Java Web 学习笔记之六 DataOutputStream方法writeBytes(String s)方法中文乱码问题
- cocos2d-x-3.1 国际化strings.xml解决乱码问题 (coco2d-x 学习笔记四)
- cocos2d-x 3.2 在window平台vs2012下解决中文乱码问题
- 学习笔记--SpringMVC 3.1下返回json时中文显示乱码问题的解决方案
- Cocos2d-x 学习随记二 Boost::Locale解决中文乱码问题
- node.js 学习笔记(一) 解决node里中文乱码问题
- Androin学习笔记三十九:Android 中文乱码问题
- struts2学习笔记----------struts2.1.6接收中文请求参数乱码问题
- SprintBoot学习笔记(5):解决中文乱码问题
- Java学习笔记37:Spring 使用 @ResponseBody 返回中文乱码问题解决
- cocos2d-x 3.2 在window平台vs2012下解决中文乱码问题
- Struts2 学习笔记 —— 10 —— Action接收参数时的中文乱码问题
- 学习笔记:处理表单提交的中文乱码问题
- 【2015/4/25】JSP学习笔记4---JSP的ession+中文乱码问题
- ajax学习笔记---解决浏览器缓存和中文乱码问题