cocos2dx 3.0 windows平台 中文乱码解决
2014-09-10 09:49
381 查看
From: http://www.cnblogs.com/yujiaao/p/3691938.html
因为linux下cocostudio wine安装不上 而且又要开发windows程序 果断舍弃了ubuntu而实用vs2013 去玩cocos2dx3.0
花了一天的时间才解决中文乱码 泪奔ing 分享记录下 下面是我尝试的的过程:
1相关设置
右键项目属性——》配置属性---》常规---选择Unicode编码
发现仍然是乱码
2 更换字体无效(我最开始一直以为这个问题 各种纠结)
3使用Userdefault存数据在取出
xml文件是utf8的 但是取出还是无效
4.严重怀疑编译器虽然调整为Unicode 但是缺要转为ansi编译 而编译过程中某些字符串可能不转编码导致乱码。。。(对于vs不太了解)
疯狂查看源码和各种资料 发现 项目名称/cocos2d/extensions/proj.win32
里面有个win32inputbox的类(h和cpp)查看里面有转码方法(网上2.x给的资料是有个third_party里面有转码 但是没找到)
在源码中引入头文件无效(原因是虽然文件存在 但是编译器没有把他识别为源码)需要在解决工具面板 右键添加现有项 添加头文件和cpp文件沮洳工程即可
Win32InputBox.h Win32InputBox.cpp 两个文件 要把 他们通过添加现有项的方式添加进来 然后看h的源码 里面有静态转码函数
然后使用
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi) 转换一下即可(其实为什么要转成utf8 我也不懂 我试着反着转换发现不行)
有源码就是好 找不到的东西最后到源码包里面去翻 可以深入理解每一个细节。。。。
ps:我觉得那两个静态转换的函数挺实用的 果断记录下来 以后在遇到编码问题的时候备用
因为linux下cocostudio wine安装不上 而且又要开发windows程序 果断舍弃了ubuntu而实用vs2013 去玩cocos2dx3.0
花了一天的时间才解决中文乱码 泪奔ing 分享记录下 下面是我尝试的的过程:
1相关设置
右键项目属性——》配置属性---》常规---选择Unicode编码
发现仍然是乱码
2 更换字体无效(我最开始一直以为这个问题 各种纠结)
3使用Userdefault存数据在取出
xml文件是utf8的 但是取出还是无效
4.严重怀疑编译器虽然调整为Unicode 但是缺要转为ansi编译 而编译过程中某些字符串可能不转编码导致乱码。。。(对于vs不太了解)
疯狂查看源码和各种资料 发现 项目名称/cocos2d/extensions/proj.win32
里面有个win32inputbox的类(h和cpp)查看里面有转码方法(网上2.x给的资料是有个third_party里面有转码 但是没找到)
在源码中引入头文件无效(原因是虽然文件存在 但是编译器没有把他识别为源码)需要在解决工具面板 右键添加现有项 添加头文件和cpp文件沮洳工程即可
Win32InputBox.h Win32InputBox.cpp 两个文件 要把 他们通过添加现有项的方式添加进来 然后看h的源码 里面有静态转码函数
然后使用
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi) 转换一下即可(其实为什么要转成utf8 我也不懂 我试着反着转换发现不行)
有源码就是好 找不到的东西最后到源码包里面去翻 可以深入理解每一个细节。。。。
ps:我觉得那两个静态转换的函数挺实用的 果断记录下来 以后在遇到编码问题的时候备用
#include <windows.h> #include <tchar.h> std::string AnsiToUtf8(std::string strAnsi) { std::string ret; if (strAnsi.length() > 0) { int nWideStrLength = MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, NULL, 0); WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR)); memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR)); int nUtf8Length = WideCharToMultiByte( CP_UTF8,0,pwszBuf,-1,NULL,0,NULL,FALSE ); char* pszUtf8Buf = (char*)malloc((nUtf8Length+1)*sizeof(char)); memset(pszUtf8Buf, 0, (nUtf8Length+1)*sizeof(char)); WideCharToMultiByte(CP_UTF8, 0, pwszBuf, -1, pszUtf8Buf, (nUtf8Length+1)*sizeof(char), NULL, FALSE); ret = pszUtf8Buf; free(pszUtf8Buf); free(pwszBuf); } return ret; } std::string Utf8ToAnsi(std::string strUTF8) { std::string ret; if (strUTF8.length() > 0) { int nWideStrLength = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0); WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR)); memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR)); MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR)); int nAnsiStrLength = WideCharToMultiByte( CP_ACP,0,pwszBuf,-1,NULL,0,NULL,FALSE ); char* pszAnsiBuf = (char*)malloc((nAnsiStrLength+1)*sizeof(char)); memset(pszAnsiBuf, 0, (nAnsiStrLength+1)*sizeof(char)); WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, pszAnsiBuf, (nAnsiStrLength+1)*sizeof(char), NULL, FALSE); ret = pszAnsiBuf; free(pszAnsiBuf); free(pwszBuf); } return ret; }
相关文章推荐
- cocos2dx 3.0 windows平台 中文乱码解决(原创)
- Windows平台下MySql5.6中文乱码问题解决
- windows平台下编辑的内容传到linux平台出现中文乱码的解决办法
- Windows平台IIS下WordPress 2.7 中文tag和中文分类链接乱码的解决方法
- windows平台playframework2控制台中文乱码解决
- cocos2dx 3.0 显示中文及乱码解决方式
- Windows平台下SQL plus中查询到的中文数据是乱码解决方法
- Oracle中文乱码的解决方法——windows移殖linux平台wchar_t长度不同的解决策略
- Windows平台下MySql5.6中文乱码问题解决
- C0C0S2D-X在windows平台下中文乱码解决;
- Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)
- 解决中文软件在英文版Windows 7下乱码的方法
- linux下将中文文件名文件cp到windows目录下后文件名乱码问题的解决
- ubuntu解决 打开windows记事本.txt中文乱码的方法
- windows 7 cmd 命令行中文显示乱码解决办法
- extjs3.0 下中文乱码的解决
- 解决英文版Windows 2003中文乱码问题
- Spring3.0中REST转中文乱码解决方法
- 解决在linux下用eclipse打开windows文本文件产生中文乱码的问题
- Windows控制台(cmd)中文乱码解决方法