昨天改写cocos2d-x的例程,想在其基础上加上一个计分系统。没有分数实在让人没有玩下去的动力!

我在主场景上加上了一个CCLabelTTF,用于显示分数。

但是意外的发现,当内容含有中文时,CCLabelTTF的显示内容为乱码。

无奈只好Google百度寻求答案,明白了这个问题的缘由。

因为cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,如果添加L标志,则为Unicode编码。

解决这个问题有三种办法:

  1. 将源代码文件保存为utf8编码,不过由于编译器的问题,这种方式会导致很多无法预测的问题

  2. 将字符串用utf8编码集中存到一文件中,然后用代码读取这些字符串来使用,这种办法还能很好的支持多语言版本

  3. 使用字符串时,先将其转换为utf8编码

我最终使用了第三种方法,第一种撇开不说,第二种实现起来比较麻烦,第三种则要方便很多。

一般在windows上,我们使用API MultiByteToWideChar来进行各种编码转换。

不过这东西只能在Windows上用,在cocos2d-x上用就有点不合时宜的感觉,毕竟安卓上可没这个API。

还好cocos2d-x考虑很周到,它自带了一个iconv库

只需要在项目附加依赖项里加入libiconv.lib,并且包含头文件iconv/iconv.h即可使用。

我通过这个库封装了几个编码转换的函数,代码如下

#include "Tool.h"int 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(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;iconv_close(cd);return 0;
}/*UTF8转为GB2312*/
std::string u2a(const char *inbuf)
{size_t inlen = strlen(inbuf);char * outbuf = new char[inlen * 2 + 2];std::string strRet;if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0){strRet = outbuf;}delete [] outbuf;return strRet;
}/*GB2312转为UTF8*/
std::string 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;
}

然后在每次要使用中文前,用a2u函数将文本转换为utf-8编码,使用例程如下:

//刷新分数显示
char buff[1024];
sprintf_s(buff, 1024, "得分:%d", _Score);
_pLabelScore->setString(a2u(buff).c_str());

至此,我们可以在cocos2d-x中正常显示中文了!

转载于:https://www.cnblogs.com/DswCnblog/p/3606130.html

cocos2d-x解决中文乱码问题的几种办法相关推荐

  1. jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法

    从A页面通过url传参到B页面时,解析url参数可以用下面两种方法: 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(&q ...

  2. matplotlib解决中文乱码问题

    matplotlib解决中文乱码问题的两种方法 1.Matplotlib的字体管理 通过指定字体来解决乱码问题,首先找到Windows的字体库所在位置我的是:"C:\Windows\Font ...

  3. cocos2dx java 乱码_[cocos2d-x] --- 完美解决中文乱码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一 介绍 最近由于各种各样的原因,好长时间没有学习cocos2d-x了.突然有种害怕的感觉,这样下去,以前学的关于cocos2d-x的一点皮毛会彻底忘记的 ...

  4. sqlserver mysql 乱码_SQLServer数据库如何解决中文乱码问题?方法有哪些?

    很多使用数据库的人都知道,在安装SQLServer数据库是,如果设置不当就会出现一些中文乱码.主要原因是,很多人在使用默认安装系统时,一般不会考虑到默认排序的规则是拉丁文的排序规则,只是点击下一步,在 ...

  5. php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析

    PHP读取文件,解决中文乱码UTF-8的方法分析,方法,中文,操作技巧,文本,本文 PHP读取文件,解决中文乱码UTF-8的方法分析 易采站长站,站长之家为您整理了PHP读取文件,解决中文乱码UTF- ...

  6. java txt中文乱码,JAVA读取TXT文件 可解决中文乱码问题

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  7. AJAX解决中文乱码问题

    一.解决中文乱码问题的方法1:页面端发出的数据作一次encodeURI,如:encodeURI($("#userName").val()                       ...

  8. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...

  9. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数

    js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...

最新文章

  1. 福利 | 送你一张通往「2019 AI开发者大会」的门票
  2. matlab能修图吗,相机上这个“功能”,不打开会影响修图效果,别等拍完照片才知道...
  3. jQuery ready(fn) 页面载入函数
  4. java 服务器发布_我如何在java中发布到服务器?
  5. 投资理财web后端系统_如何挑选现金类理财产品?三大对比了解一下
  6. 看门狗超时前在内核打印信息
  7. 中国聚合混凝土行业市场供需与战略研究报告
  8. MySQL【第三篇】数据类型
  9. 笔记:Chrome 对浏览器的改进
  10. 清华大学操作系统公开课笔记(向勇、陈渝)
  11. python整数缓存问题
  12. input和output哪个是充电_html中input和output的区别?糊涂了搞不清了。哪位给解说下...
  13. 电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...
  14. vue 调用移动录像_vue H5项目调用手机摄像头录像并上传
  15. java使用openoffice/libreoffice进行office转pdf
  16. IBM智慧存储厦门巡展发布Storwize RAS方案
  17. 删除按升序排列的单链表中的所有重复元素
  18. juniper RMA坏件返还流程
  19. win10怎么练计算机一级,1步打造极限精简的win10系统,让老电脑像新机般流畅,再也不卡了...
  20. 人工智能阿凡达平台发布,全力拥抱“元宇宙”

热门文章

  1. 计算机php什么意思,什么是PHPC(个人高性能计算机 )
  2. HTML如何让图片覆盖背景颜色,css – 使用rgba背景颜色覆盖背景图像
  3. php网页弹出图片,商城网站是如何单击头像直接弹出可以上传图片然后预览?
  4. java判断波动的曲线是否大体平衡_基于标的物价格和波动率的期权投资策略
  5. 接收服务器显示帧控制错误,Websocket连接关闭,出现错误“接收到意外的继续帧”...
  6. ie浏览器服务器ini文件在哪,怎么用IE浏览器打开电脑中的一个文件?
  7. java 路径 工具类,java 绝对路径工具类
  8. 回溯法排序树怎么画_kd tree(k-dimensional树的简称)
  9. 主角有智能芯片的种田小说_推荐3本克苏鲁类小说,压抑邪恶与搞笑逗乐并存,看看是你的菜吗...
  10. 【MySQL】(万字解析)MySQL表的增删改查(进阶-上)