cocos2d Label无法正常显示中文
来源:互联网 发布:手游代练软件 编辑:程序博客网 时间:2024/05/01 03:57
我当初在用cocos2d做黑白棋的时候用label无法正常的输出中文,但是英语和数字符号都是能正常显示的。后来我去查了一下原来是编码的问题,用vs的时候一般编码是GBK,而cocos2d是用UTF-8。所以当我们在vs里写好程序运行的时候发现出来的中文是乱码的。下面我来介绍两种能正常显示中文的方法。
(1)使用iconv库来转换编码方式。使用的方法也很简单现在头文件里添加“iconv.h”然后再写一个转换函数,这个函数可以直接复制下面的代码直接用。
string GBKToUTF8(std::string gbkStr, const char* toCode, const char* formCode){iconv_t iconvH;iconvH = iconv_open(formCode, toCode);if (iconvH == 0){return 0;}const char* strChar = gbkStr.c_str();const char** pin = &strChar;size_t strLength = gbkStr.length();char* outbuf = (char*)malloc(strLength * 4);char* pBuff = outbuf;memset(outbuf, 0, strLength * 4);size_t outLength = strLength * 4;if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength)){iconv_close(iconvH);return 0;}gbkStr = pBuff;iconv_close(iconvH);return gbkStr;}
使用的时候可以像我这样label1->setString(GBKToUTF8("黑子下", "gbk", "utf-8"))直接使用。
特别提醒一下上面提到的都是在win32下面的,若要移植到安卓下面的话去掉上面的东西不用任何转换就可以正常显示中文。
(2)使用XML文件
先看下我们的xml文件:
<dict> <key>chinese1</key> <string>美好的一天</string> <key>japanese</key> <string>良い一日を</string> <key>spanish</key> <string>Buen día</string> </dict> </plist>然后再来看如何使用:
//利用CCDictionary来读取xml CCDictionary *strings = CCDictionary::create("fonts/strings.xml"); //中文,日语,西班牙语:objectForKey根据key,获取对应的string const char *chinese = ((CCString*)strings->objectForKey("chinese1"))->m_sString.c_str(); const char *japanese = ((CCString*)strings->objectForKey("japanese"))->m_sString.c_str(); const char *spanish = ((CCString*)strings->objectForKey("spanish"))->m_sString.c_str(); CCLabelBMFont *label1 = CCLabelBMFont::create(spanish, "fonts/arial-unicode-26.fnt"); addChild(label1); label1->setPosition(ccp(s.width/2, s.height/4*3-20)); CCLabelBMFont *label2 = CCLabelBMFont::create(chinese, "fonts/arial-unicode-26.fnt"); addChild(label2); label2->setPosition(ccp(s.width/2, s.height/4*2)); CCLabelBMFont *label3 = CCLabelBMFont::create(japanese, "fonts/arial-unicode-26.fnt"); addChild(label3); label3->setPosition(ccp(s.width/2, s.height/4*1));
补充,发现有更直接的方法.
#ifdef WIN32
#pragma execution_character_set("utf-8")
#endif
1 0
- cocos2d Label无法正常显示中文
- 中文图片无法正常显示
- mysql无法正常显示中文
- 解决JFreeChart无法正常显示中文问题
- 解决JFreeChart无法正常显示中文问题
- Gvim中文菜单无法正常显示
- jsp中无法正常显示中文
- ubuntu console 中文无法正常显示的问题
- How:windows 7 下控制台无法正常显示中文解决
- reviewboard 查看diff文件时,无法正常显示中文
- 黄聪:python控制台无法正常显示中文字符串解决方法
- ubuntu14.04中使用wxWidgets,中文无法正常显示
- python2.7:dic2json 解决中文无法正常显示问题
- python2.7;解决中文无法正常显示问题
- 图片中文水印在Linux机器下无法正常显示
- postgres因字符集原因无法正常显示中文
- ckfinder上传图片含中文,预览无法正常显示问题
- XML输出中文时,无法用xsl查看(XML文件不能正常显示、中文显示乱码)
- Objective-C Runtime 运行时之五:协议与分类
- Java中的WeakReference讲解
- PHP开源框架 CodeIgniter
- 第七周项目一 (成员函数,友元函数和一般函数的区别)
- sudo免密码
- cocos2d Label无法正常显示中文
- Objective-C Runtime 运行时之六:拾遗
- 背包问题回溯法的递归实现(java)
- UIImage
- 查看网络流量情况
- .NET实验6-2
- hdu 1166 敌兵布阵
- Centos 6.5 64位操作系统,更新火狐浏览器到最新版本
- 函数指针与回调函数