做個(gè)打飛機的游戲,由于版本太新,網(wǎng)上基本沒(méi)有教教程,我的版本是cocos2d-x 3.1.1的,今天遇到cocos2dx中中文亂碼的問(wèn)題。無(wú)奈只好Google百度尋求答案,明白了這個(gè)問(wèn)題的緣由。因為cocos2d-x內部是以utf8處理文本的,而VS直接輸入時(shí)文本編碼為GBK,如果添加L標志,則為Unicode編碼。
解決這個(gè)問(wèn)題有三種辦法:
將源代碼文件保存為utf8編碼,不過(guò)由于編譯器的問(wèn)題,這種方式會(huì )導致很多無(wú)法預測的問(wèn)題
將字符串用utf8編碼集中存到一文件中,然后用代碼讀取這些字符串來(lái)使用,這種辦法還能很好的支持多語(yǔ)言版本
使用字符串時(shí),先將其轉換為utf8編碼
我最終使用了第三種方法,第一種撇開(kāi)不說(shuō),第二種實(shí)現起來(lái)比較麻煩,第三種則要方便很多。//加這個(gè)函數,G2U,我自己寫(xiě)的函數名。
glview=GLView::create(G2U(飛機大戰));
//然后把這個(gè)函數加上
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;
}
//然后在頭文件里面加上函數聲明就可以了
char* G2U(const char* gb2312) ;
聯(lián)系客服