在cocos2d中如果輸入中文,在場景中會顯示出亂碼,這是因爲編碼方式的問題,解決這個問題的放大也不是很難,而且代碼能反覆使用比較簡單,易於操作
這篇博客只能算是部分原創,因爲這裏我借鑑了 原始出處 我借鑑了一些代碼,希望大家轉載時也能尊重原創,在這裏我說明的會更加詳細一些,對於新手或是不是很熟練的人來說還是很有幫助的,高手忽略我...
第一步:
我們需要新建一個cpp文件和一個.h文件,起名字叫做Tools,這個裏邊放的就是我們轉碼需要的工具代碼
(1) Tools.h
#ifndef _TOOLS_H_
#define _TOOLS_H_
//中文轉碼
#include "cocos2d.h"
#pragma comment(lib, "libiconv.lib")
int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode);
#endif
(2) Tools.cpp
#include "Tools.h"
#include "iconv\iconv.h"
int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode)
{
iconv_t iconvH;
iconvH = iconv_open(fromCode, toCode);
if (iconvH == 0)
{
return -1;
}
const char* strChar = gbkStr.c_str();
const char** pin = &strChar;
size_t strLength = gbkStr.length();
char* outbuf = (char*) malloc(strLength*4);
char* pBuff = outbuf;
memset( outbuf, 0, strLength*4);
size_t outLength = strLength*4;
if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength))
{
iconv_close(iconvH);
return -1;
}
gbkStr = pBuff;
iconv_close(iconvH);
return 0;
}
(以下是我的純原創)要注意的是,很多人icov.h這個文件的目錄沒有在指定目錄下,這會導致報錯,我們有兩種解決方式。一種是像代碼中寫的一樣,把iconv.h文件放入到指定的文件目錄下,這樣就可以直接使用了;第二種就是在你創建的這個項目中CTRL+F搜索iconv.h這個文件,把這個相對路徑放置到include後邊,舉例:
#include "win32-specific\icon\include\iconv.h"
這個是我當時跑的時候的目錄,讀者可以根據自己的情況進行更改
好了,新建完這兩個文件之後我們要在調用的界面上進行相應的修改了,注意要調用這幾個頭文件
#include "Tools.h"
#include "win32-specific\icon\include\iconv.h"
接下來就是我們自己想要的中文文字了,我舉個栗子:
std::string a = "天鵝";
GBKToUTF8(a, "gbk", "utf-8");
Label* label = Label::create(a.c_str(), "Marker Felt", 100);
label->setPosition(ccp(450, 450));
this->addChild(label);
在這一部分就會出現天鵝的中文字樣,不再是亂碼