Cocos输出中文字符

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);

很简单,很方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值