cocos2dx 解決中文亂碼問題

2021-10-01 13:53:42 字數 2838 閱讀 9918

在使用cocos2dx的時候,**裡面使用了中文或者是在cocos studio編輯器裡面使用了中文,顯示的時候會出現亂碼問題,下面提供幾個解決方案:

#pragma execution_character_set("utf-8")
問題與解決方法

在windows環境下使用visual studio 開發cocos2d-x,由於visual studio 預設編碼為gbk 格式,而cocos2d-x引擎預設編碼為utf-8, 如果有用到中文,在遊戲執行時有可能會出現亂碼的情況,這個問題一般有三種解決方案,如下

1、將原始碼檔案儲存為utf-8格式(不建議,治標不治本)

2、自己編寫編碼轉換**,或者使用cocos2dx的庫。

strings.plist

把字串寫到xml檔案中,然後解析xml檔案,格式按照android中的strings.xml。這是一種更好的做法,特別是需要提供國際化支援時。

缺點:

方法一:可能導致其它未知錯誤。

方法二:win32和android都需要轉換,而且編碼轉換庫會使安卓apk變大。

方法三:雖然實現有點麻煩,但是是較完善的解決方法。

cocos2d-x3.0從xml讀取中文

儲存的xml檔案放到resources資料夾裡,具體格式自己定,但要是uft8的。比如:

<?xml version="1.0" encoding="utf-8"?>

shop_info1

猛獁shop_info2

慢慢

解析**也很少:

// 解析xml獲取值

ccdictionary* strings = ccdictionary::createwithcontentsoffile("string.xml"); // xml檔案載入為ccdictionary物件

const char *shop_info1 = ((string*)strings->objectforkey("shop_info1"))->getcstring(); // 通過鍵來獲取值

經過驗證,cocos3.2版本的也能執行。

不過ccdictionary是cocos2.x版本的資料結構,3.x版本較少使用。

官網解析xml方法

cocos2d-x 已經加入了tinyxml2用於xml的解析。3.0版本位於external/tinyxml2下。2.x版本位於cocos2dx/support/tinyxml2下。

引入標頭檔案

#include "tinyxml2/tinyxml2.h"

using namespace tinyxml2;

xml解析

void helloworld::par***ml(const char *filename)

xmlelement *rootele = pdoc->rootelement();

//獲取第乙個節點屬性

const xmlattribute *attribute = rootele->firstattribute();

//列印節點屬性名和值

log("attribute_name = %s,attribute_value = %s", attribute->name(), attribute->value());

xmlelement *dicele = rootele->firstchildelement("dic");

xmlelement *keyele = dicele->firstchildelement("key");

if (keyele)

xmlelement *arrayele = keyele->nextsiblingelement();

xmlelement *childele = arrayele->firstchildelement();

while ( childele )

delete pdoc;

}

在節點解析過程中,注意對獲取到的節點進行判空處理。

解析結果列印

cocos2d: attribute_name = version,attribute_value = 1.0

cocos2d: keyele text= text

cocos2d: childele text= cocos2d-x

cocos2d: childele text= cocos2d-x

cocos2d: childele text= cocos2d-x

cocos2dx開發,如果在**中直接賦值中文,會顯示亂碼;正確的做法是**中不要出現中文,可以簡單利用cocos2dx的dictionary::createwithcontentsoffile方法通過配置讀取。

在resources資料夾下建立language.xml 檔案:

chinese

王者榮耀

taiyu

กษัตริย์แห่งความรุ่งโรจน์

使用:

dictionary *language = dictionary::createwithcontentsoffile("language.xml");

std::string chinese = ((string*)language->objectforkey("chinese"))->getcstring();

cocos2d x解決中文亂碼

一 介紹 最近由於各種各樣的原因,好長時間沒有學習cocos2d x了。突然有種害怕的感覺,這樣下去,以前學的關於cocos2d x的一點皮毛會徹底忘記的,下次再學,估計又得重頭開始了。所以,還是要平時多多使用吧,持之以恆最重要了.由於在cocos2d x中直接使用中文會出現亂碼,誰讓cocos2d...

cocos2d x 中文 亂碼問題

最近好些人都有問到,cocos2d x 對中文支援真不好。各種亂碼,甚至連注釋放在mac下都亂碼。解決操作步驟如下,備忘一下 1 選中有中文的那個cpp,點檔案另存為,在儲存這裡竟然有個小箭頭 點之,再點編碼儲存 這個cpp就utf 8化了,然後中文就正常了,好麻煩。這是現在彩鳥筆者唯一能找到方便的...

cocos2d x中文亂碼問題解決

這裡寫乙個工具類 xmlparser,用來解決遊戲中出現的中文亂碼問題。主要是把遊戲中要使用到的文字儲存在xml檔案中,通重載入這個檔案,並且訪問name節點,來獲取相對應的中文。xmlparser.h如下 xmlparse.h game1 created by imac on 15 7 24.if...