CoCos2dx開發:中文亂碼

我命傾塵發表於2019-03-08

一、FontToUTF8()方法修改字型:

  1、HelloWorldScene.h標頭檔案中宣告方法:

1 char* FontToUTF8(const char* font);

  2、HelloWorldScene.cpp中書寫方法:

 1 char* HelloWorld::FontToUTF8(const char* font)
 2 {
 3     int len = MultiByteToWideChar(CP_ACP, 0, font, -1, NULL, 0);
 4     wchar_t *wstr = new wchar_t[len + 1];
 5     memset(wstr, 0, len + 1);
 6     MultiByteToWideChar(CP_ACP, 0, font, -1, wstr, len);
 7     len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
 8     char *str = new char[len + 1];
 9     memset(str, 0, len + 1);
10     WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
11     if (wstr)
12         delete[] wstr;
13     return str;
14 }

  HelloWorldScene.cpp中初始化init()方法裡,呼叫方法進行中文轉換:

1 auto* label3 = Label::create(HelloWorld::FontToUTF8("開始遊戲"), "宋體", 40);

  注意:這種方法可以使執行結果裡的亂碼成為中文,但是會有一個問題,就是在打包成apk時出現錯誤:

  錯誤:

  

  這是由於NDK不支援所用的C++庫造成的。

二、XML檔案呼叫修改字型:

  資原始檔夾Resources下:

  

  檔案內容都如下:

1 <dict>  
2     <key>string</key>  
3     <string>開始遊戲</string>  
4 </dict>  

  

  HelloWorldScene.cpp中呼叫XML檔案:

1   auto *chnStrings = Dictionary::createWithContentsOfFile("UTF8.xml");
2     const char *str1 = ((String*)chnStrings->objectForKey("string"))->getCString();
3   auto* label3 = Label::create(str1, "宋體", 40);

  注意:xml檔案和bak檔案都是要儲存為UTF-8編碼格式,這個很重要:

  

  結果如圖:

  

  打包驗證:

  

  

  

  

  打包成功!

 

 

 

  

相關文章