[cocos2d-x] --- 完美解决中文乱码

一 介绍

最近由于各种各样的原因,好长时间没有学习cocos2d-x了。突然有种害怕的感觉,这样下去,以前学的关于cocos2d-x的一点皮毛会彻底忘记的,下次再学,估计又得重头开始了。所以,还是要平时多多使用吧,持之以恒最重要了...

由于在cocos2d-x中直接使用中文会出现乱码,谁让cocos2d-x是由cocos2d而来,而cocos2d这东西是老外写的呢?通常解决中文乱码有两种方法:

(1)使用iconv库,cocos2d-x中提供了这个库,但是只是在win32平台,当程序移植到Android等平台时,需要自己下载iconv库编译。

(2)将中文字符串写到XML文件中(注意XML文件格式保存为UTF-8),然后解析XML文件,格式可以仿照Android中的strings.xml,而且这种方法能方便以后的国际化。

通过比较,可以很容易的发现第二种方法更好,那么下面就介绍第二种方法,让我们能在cocos2d-x程序中使用中文,彻底解决中文乱码问题。

 

 


二 实现
1 新建XML文件,按照一定的格式,输入相应要显示的中文,最后一定需要使用UTF-8格式保存文件

[html] 
<dict> 
    <key>Hello</key> 
    <string>你好!</string> 
    <key>Info</key> 
    <string>我是hahaya。</string> 
</dict> 
<dict>
    <key>Hello</key>
    <string>你好!</string>
    <key>Info</key>
    <string>我是hahaya。</string>
</dict>


2 代码实现

[cpp] 
/** 在cocos2d-x中使用中文 **/ 
//利用CCDictionary来读取xml  
CCDictionary *strings = CCDictionary::createWithContentsOfFile("strings.xml"); 
//读取Hello键中的值 objectForKey根据key,获取对应的string  
const char *hello = ((CCString*)strings->objectForKey("Hello"))->m_sString.c_str(); 
//读取Info键中的值  
const char *info = ((CCString*)strings->objectForKey("Info"))->m_sString.c_str(); 
 
//显示  
CCLabelTTF  *labelHello = CCLabelTTF::create(hello, "Arial", 24); 
labelHello->setPosition( ccp(size.width / 2, size.height - 50) ); 
this->addChild(labelHello, 1); 
 
CCLabelTTF *labelInfo = CCLabelTTF::create(info, "Arial", 30); 
labelInfo->setPosition( ccp(size.width / 2, size.height - 100) ); 
this->addChild(labelInfo, 1); 
  /** 在cocos2d-x中使用中文 **/
  //利用CCDictionary来读取xml
  CCDictionary *strings = CCDictionary::createWithContentsOfFile("strings.xml");
  //读取Hello键中的值 objectForKey根据key,获取对应的string
  const char *hello = ((CCString*)strings->objectForKey("Hello"))->m_sString.c_str();
  //读取Info键中的值
  const char *info = ((CCString*)strings->objectForKey("Info"))->m_sString.c_str();
  //显示
  CCLabelTTF  *labelHello = CCLabelTTF::create(hello, "Arial", 24);
  labelHello->setPosition( ccp(size.width / 2, size.height - 50) );
  this->addChild(labelHello, 1);
  CCLabelTTF *labelInfo = CCLabelTTF::create(info, "Arial", 30);
  labelInfo->setPosition( ccp(size.width / 2, size.height - 100) );
  this->addChild(labelInfo, 1);

 

3 程序运行效果

 

 \

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值