Hi,大家好。
因一些需求,项目需要升级到windows phone8.1 universalapp。当前项目是3D的,查看cocos2d-x 3.5版本里面有universal C++的工程,故首先升级了引擎。
移植过程不多说了。
在移植上去之后,游戏跑起来后,发现部分自己写的中文字符无法解析,一堆乱码。期初是在模拟器上调试。后来使用两个方法解决了之,归根结底是字符编码问题。
提供两个方法。GBK转UTF8,UTF8转GBK。
string GBKToUTF8(const std::string& strGBK) { string strOutUTF8 = ""; WCHAR * str1; int n = MultiByteToWideChar(CP_ACP,strGBK.c_str(),-1,NULL,0); str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP,str1,n); n = WideCharToMultiByte(CP_UTF8,NULL); char * str2 = new char[n]; WideCharToMultiByte(CP_UTF8,str2,n,NULL); strOutUTF8 = str2; delete[]str1; str1 = NULL; delete[]str2; str2 = NULL; return strOutUTF8; }
string UTF8ToGBK(const std::string& strUTF8) { int len = MultiByteToWideChar(CP_UTF8,strUTF8.c_str(),0); unsigned short * wszGBK = new unsigned short[len + 1]; memset(wszGBK,len * 2 + 2); MultiByteToWideChar(CP_UTF8,(LPCSTR)strUTF8.c_str(),(LPWSTR)wszGBK,len); len = WideCharToMultiByte(CP_ACP,NULL); char *szGBK = new char[len + 1]; memset(szGBK,len + 1); WideCharToMultiByte(CP_ACP,szGBK,len,NULL); //strUTF8 = szGBK; std::string strTemp(szGBK); delete[]szGBK; delete[]wszGBK; return strTemp; }
后面在模拟器上看,没有问题了。很高兴的结束了这个问题。
后来运行Release ARM的包到手机上的时候,发现字符又乱码了。,发现这个问题,整个人就不好了。
后来通过另外一个方法解决之,转UTF8方法。还要谢谢 梅颖广先生。
下面是解决方法以及调用方法:
调用:yourLabelObj->setString(WStrToUTF8(L"抱歉,本游戏停止运营。"))
std::string WStrToUTF8(const std::wstring& src) { std::string dest; dest.clear(); for (size_t i = 0; i < src.size(); i++) { wchar_t w = src[i]; if (w <= 0x7f) { dest.push_back((char)w); } else if(w <= 0x7ff) { dest.push_back(0xc0 | ((w >> 6) & 0x1f)); dest.push_back(0x80 | (w & 0x3f)); } else if(w <= 0xffff) { dest.push_back(0xe0 | ((w >> 12) & 0x0f)); dest.push_back(0x80 | ((w >> 6) & 0x3f)); dest.push_back(0x80 | (w & 0x3f)); } else if(sizeof(wchar_t) > 2 && w <= 0x10ffff) { dest.push_back(0xf0 | ((w >> 18) & 0x07)); dest.push_back(0x80 | ((w >> 12) & 0x3f)); dest.push_back(0x80 | ((w >> 6) & 0x3f)); dest.push_back(0x80 | (w & 0x3f)); } else dest.push_back('?'); } return dest; }
文章结束,谢谢大家。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|