cocos2d-x : 解決中文亂碼問題

在開發中常會遇到顯示中文的情況,但是如果不加處理會出現亂碼的問題。

一般會有日誌亂碼窗體上的字體亂碼

原因:

vs2015 默認的編碼格式是GBK/GB312,而在輸出的時候,都是以utf-8 格式輸出的

所以會出現亂碼的情況

例如新建一個項目,將默認顯示的Hello World 改爲中文。

默認顯示:

將Hello World 改爲中文:

顯示:

 

解決:

方法一:修改默認的編碼格式

文件—>高級保存選項:

 

選擇 utf-8 無簽名 :注意: 無簽名,如果選擇有簽名,在移植到ios 或者 android 平臺,還是會出現亂碼!!!

 

然後再次運行:

 

還是出現了亂碼,這是爲什麼呢?

原因就是 Lable  標籤的字體庫。

我們可以在隨便網上下載一種中文字體庫,替換掉

例如,我下載了幼圓體:https://download.csdn.net/download/lijia1201900857/11226832

然後設置

    auto label = Label::createWithTTF("小明", "fonts/youyuan.ttf", 24);

 

日誌打印也是一樣,可以直接修改編碼格式。

但是,這樣做也會有些問題。我們先把編碼格式改爲 GB2312

然後日誌輸出 一句中文:log("大家好")

會出現亂碼:

 

然後,將編碼格式改爲 utf-8 (無簽名),然後運行:

報錯:

錯誤    C2001    常量中有換行符 

錯誤    C2143    語法錯誤: 缺少“;”(在“{”的前面)  

 

這種只會在window 下出現,你可以在後邊加 空格或者一些字符 來解決,但是即使這樣也會有部分亂碼

 

不過這種情況,在ios  和android下是正常的。

 

方法二:使用XMl 資源文件

我們創建一個資源文件:例如   string.xml

 <dict>  
   <key>welcome</key>  
    <string>歡迎你</string>  
	 <key>dear</key>  
     <string>親愛的</string>  
 </dict>

然後代碼中調用

// 獲取資源文件
auto strings = Dictionary::createWithContentsOfFile("strings.xml");

// 根據 key  查找字體
auto str = ((String *)strings->objectForKey("welcome"))->getCString();

顯示結果:

這種方法不用改變編碼格式,而且比較規範。推薦使用

方法三:代碼轉換字體格式

即通過代碼將 Gb2312 格式轉爲utf-8 ,這種沒在代碼中使用,就不詳細介紹了。有興趣的可以網上搜索。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章