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

很簡單,很方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章