cocos2dx 3.0 windows平台 中文乱码解决
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:我覺得那兩個靜態轉換的函數挺實用的 果斷記錄下來 以后在遇到編碼問題的時候備用
?
?
#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平台 中文乱码解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab卷积神经网络的实现,matl
- 下一篇: saltstack 安装nginx