您的位置:首页 > 移动开发 > Cocos引擎

Cocos输出中文字符

2016-01-08 11:58 435 查看
Cocos在直接输出中文的情况下会出现乱码的情况,下面给大家介绍一种很简单的方式来正确输出中文,使用iconv库。本版本的cocos是3.2。

直接在你的项目中创建如下一个类:

#ifndef _TOOLS_
#define _TOOLS_

#include "cocos2d.h"
using namespace cocos2d;

class Tools{
public:
static int code_convert(const char *, const char *, const char *, size_t, char*, size_t);
static std::string a2u(const char *);
};

//cpp
#include "Tools.h"
//注意这里包含的路径,也许版本不同iconv库的路径不同
#include "D:\cocosproject\plane\cocos2d\external\win32-specific\icon\include\iconv.h"
USING_NS_CC;

int Tools::code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
iconv_t cd;
const char *temp = inbuf;
const char **pin = &temp;
char  **pout = &outbuf;
memset(outbuf, 0, outlen);
cd = iconv_open(to_charset, from_charset);
if (cd == 0) return -1;
#if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
if (iconv(cd, (char **)pin, &inlen, pout, &outlen) == -1) return -1;
#elif (CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
if (iconv(cd, pin, &inlen, pout, &outlen) == -1) return -1;
#endif
iconv_close(cd);
return 0;

}

std::string Tools::a2u(const char *inbuf)
{
size_t inlen = strlen(inbuf);
char * outbuf = new char[inlen * 2 + 2];
std::string strRet;
if (code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0){
strRet = outbuf;
}
delete[] outbuf;
return strRet;
}
#endif


将这些代码带你的工程中不用管什么意思,直接可以使用该类来输出中文字符,如下使用:

//调用Tool类的a2u函数。
m_pttext = LabelTTF::create(Tools::a2u("你好世界 ").c_str(), "Arial", 24);


很简单,很方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: