bool IConvConvert(const char *from_charset, const char *to_charset, const char *inbuf, int inlen, char *outbuf, int outlen)
{
iconv_t cd = iconv_open(to_charset, from_charset);
if (cd == 0) return false;
const char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
size_t ret = iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen);
iconv_close(cd);
return ret == (size_t)(-1) ? false : true;
}
std::string IConvConvert_GBKToUTF8(const std::string& str)
{
const char* textIn = str.c_str();
char textOut[256];
bool ret = IConvConvert("gb2312", "utf-8", textIn, strlen(textIn),textOut, 256);
return ret ? string(textOut) : string();
}
做個測試,放到LABEL裏面試下:
std::string text = IConvConvert_GBKToUTF8("你好世界");
CCLabelTTF* pLabel = CCLabelTTF::create(text.c_str(), "Arial", 24);
記得在最前面添加:
#include <iconv.h>//注意一下這個路徑,如果找不到,可以搜索一下自己的COCOS2D包下面的文件。
最最重要的是下面:
#pragma comment(lib, "libiconv.lib")
萬事OK
本人版本: cocos2d-2.0-rc2-x-2.0.1 + VS2008編譯。
盜版來源: