cocos2dx 3.0 windows平台 中文乱码解决
From: http://www.cnblogs.com/yujiaao/p/3691938.html
?
因?yàn)閘inux下cocostudio wine安裝不上 而且又要開(kāi)發(fā)windows程序 果斷舍棄了ubuntu而實(shí)用vs2013 去玩cocos2dx3.0
花了一天的時(shí)間才解決中文亂碼 淚奔ing 分享記錄下 下面是我嘗試的的過(guò)程:
1相關(guān)設(shè)置
??? 右鍵項(xiàng)目屬性——》配置屬性---》常規(guī)---選擇Unicode編碼
??? 發(fā)現(xiàn)仍然是亂碼
2 更換字體無(wú)效(我最開(kāi)始一直以為這個(gè)問(wèn)題 各種糾結(jié))
3使用Userdefault存數(shù)據(jù)在取出
?? xml文件是utf8的 但是取出還是無(wú)效
4.嚴(yán)重懷疑編譯器雖然調(diào)整為Unicode 但是缺要轉(zhuǎn)為ansi編譯 而編譯過(guò)程中某些字符串可能不轉(zhuǎn)編碼導(dǎo)致亂碼。。。(對(duì)于vs不太了解)
瘋狂查看源碼和各種資料 ? 發(fā)現(xiàn)??項(xiàng)目名稱/cocos2d/extensions/proj.win32
里面有個(gè)win32inputbox的類(h和cpp)查看里面有轉(zhuǎn)碼方法(網(wǎng)上2.x給的資料是有個(gè)third_party里面有轉(zhuǎn)碼 但是沒(méi)找到)
在源碼中引入頭文件無(wú)效(原因是雖然文件存在 但是編譯器沒(méi)有把他識(shí)別為源碼)需要在解決工具面板? 右鍵添加現(xiàn)有項(xiàng) 添加頭文件和cpp文件沮洳工程即可
Win32InputBox.h Win32InputBox.cpp?兩個(gè)文件 要把 他們通過(guò)添加現(xiàn)有項(xiàng)的方式添加進(jìn)來(lái) 然后看h的源碼 里面有靜態(tài)轉(zhuǎn)碼函數(shù)
然后使用
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi)?轉(zhuǎn)換一下即可(其實(shí)為什么要轉(zhuǎn)成utf8 我也不懂 我試著反著轉(zhuǎn)換發(fā)現(xiàn)不行)
有源碼就是好 找不到的東西最后到源碼包里面去翻 可以深入理解每一個(gè)細(xì)節(jié)。。。。
ps:我覺(jué)得那兩個(gè)靜態(tài)轉(zhuǎn)換的函數(shù)挺實(shí)用的 果斷記錄下來(lái) 以后在遇到編碼問(wèn)題的時(shí)候備用
?
?
#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; }
?
總結(jié)
以上是生活随笔為你收集整理的cocos2dx 3.0 windows平台 中文乱码解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab卷积神经网络的实现,matl
- 下一篇: win7 删除Windows服务的方法