cocos2d x解決中文亂碼問題的幾種辦法

2021-06-20 23:58:07 字數 2966 閱讀 5696



昨天改寫cocos2d-x的例程,想在其基礎上加上乙個計分系統。

沒有分數實在讓人沒有玩下去的動力!

我在主場景上加上了乙個cclabelttf,用於顯示分數。

但是意外的發現,當內容含有中文時,cclabelttf的顯示內容為亂碼。

因為cocos2d-x內部是以utf8處理文字的,而vs直接輸入時文字編碼為gbk,如果新增l標誌,則為unicode編碼。

解決這個問題有三種辦法:

將源**檔案儲存為utf8編碼,不過由於編譯器的問題,這種方式會導致很多無法**的問題

將字串用utf8編碼集中存到一檔案中,然後用**讀取這些字串來使用,這種辦法還能很好的支援多語言版本

使用字串時,先將其轉換為utf8編碼

我最終使用了第三種方法,第一種撇開不說,第二種實現起來比較麻煩,第三種則要方便很多。

一般在windows上,我們使用api multibytetowidechar來進行各種編碼轉換。

不過這東西只能在windows上用,在cocos2d-x上用就有點不合時宜的感覺,畢竟安卓上可沒這個api。

還好cocos2d-x考慮很周到,它自帶了乙個iconv庫

只需要在專案附加依賴項裡加入libiconv.lib,並且包含標頭檔案iconv/iconv.h即可使用。

我通過這個庫封裝了幾個編碼轉換的函式,**如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

#include "tool.h"

intcode_convert(constchar*from_charset,constchar*to_charset,constchar*inbuf,size_tinlen,char*outbuf,size_toutlen)

/*utf8轉為gb2312*/

std::string u2a(constchar*inbuf)

deleteoutbuf;

returnstrret;

}

/*gb2312轉為utf8*/

std::string a2u(constchar*inbuf)

deleteoutbuf;

returnstrret;

}

然後在每次要使用中文前,用a2u函式將文字轉換為utf-8編碼,使用例程如下:

1

2

3

4

//重新整理分數顯示

charbuff[1024];

sprintf_s(buff, 1024,"得分:%d", _score);

_plabelscore->setstring(a2u(buff).c_str());

至此,我們可以在cocos2d-x中正常顯示中文了!

cocos2d x解決中文亂碼

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

cocos2dx 解決中文亂碼問題

在使用cocos2dx的時候,裡面使用了中文或者是在cocos studio編輯器裡面使用了中文,顯示的時候會出現亂碼問題,下面提供幾個解決方案 pragma execution character set utf 8 問題與解決方法 在windows環境下使用visual studio 開發coc...

cocos2d x 中文 亂碼問題

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