Cocos2d-x 中文显示

一、使用第三方库iconv
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();

}
使用方法:
std:: string text = IConvConvert_GBKToUTF8("我是中文字符串");

CCLabelTTF* pLabel = CCLabelTTF::labelWithString(text.c_str(), "Arial", 24);

二、使用XML文件
(通过读取xml文件显示中文,这种方法更利于软件的国际化)
1、先写好一个xml文件(CHN_Strings.xml)。注意记得要以UTF-8编码保存。格式很简单,一个key对应一个string的键值对。如下:
< dict >  
     < key >language </ key >  
     < string >English </ string >  
     < key >username </ key >  
     < string >虚空骄阳 </ string >  
     < key >website </ key >  
     < string >http://www.cppblog.com/xkjy3000/ </ string >  
</ dict >
2、通过CCDictionary读取xml
(CCDictionary其实是利用哈希表算法来进行CCObject管理的一个类)
A、创建词典类实例
CCDictionary *pchStrings = CCDictionary::createWithContentsOfFile("CHN_Strings.xml");
B、通过键(key)获取值(value)
const  char *pUsername = ((CCString*)pchStrings->objectForKey("username"))->m_sString.c_str();
C、使用value
CCLabelTTF* pLabel = CCLabelTTF::create(pUsername, "Arial", 24);       // 这里创建一个文本  
pLabel->setPosition(ccp(origin.x + visibleSize.width/2,origin.y + visibleSize.height - pLabel->getContentSize().height));  
this->addChild(pLabel, 1);

以下自定义读取指定xml中指定key中文字符串的函数
函数声明
static  const  char* getCHString( const  string filename,  const  string key);
函数实现
const  char* XXX::getCHString( const  string filename,  const  string key)
{  
     // 利用CCDictionary来读取xml
    CCDictionary *pStrings = CCDictionary::createWithContentsOfFile(filename.c_str());
     // 读取key键中的值 objectForKey根据key,获取对应的string
     const  char *pStr = ((CCString*)pStrings->objectForKey(key))->m_sString.c_str();
     return pStr;
}

使用方法:
const  char* pText = XXX::getCHString("CHN_Strings.xml", "username");

你可能感兴趣的:(Cocos2d-x 中文显示)