做個打飛機的游戲,由于版本太新,網(wǎng)上基本沒有教教程,我的版本是cocos2d-x 3.1.1的,今天遇到cocos2dx中中文亂碼的問題。無奈只好Google百度尋求答案,明白了這個問題的緣由。因為cocos2d-x內(nèi)部是以utf8處理文本的,而VS直接輸入時文本編碼為GBK,如果添加L標志,則為Unicode編碼。
解決這個問題有三種辦法:
將源代碼文件保存為utf8編碼,不過由于編譯器的問題,這種方式會導致很多無法預測的問題
將字符串用utf8編碼集中存到一文件中,然后用代碼讀取這些字符串來使用,這種辦法還能很好的支持多語言版本
使用字符串時,先將其轉(zhuǎn)換為utf8編碼
我最終使用了第三種方法,第一種撇開不說,第二種實現(xiàn)起來比較麻煩,第三種則要方便很多。//加這個函數(shù),G2U,我自己寫的函數(shù)名。
glview=GLView::create(G2U(飛機大戰(zhàn)));
//然后把這個函數(shù)加上
char* AppDelegate::G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
//然后在頭文件里面加上函數(shù)聲明就可以了
char* G2U(const char* gb2312) ;