cocos2d-x解决中文乱码问题的几种办法
昨天改写cocos2d-x的例程,想在其基础上加上一个计分系统。没有分数实在让人没有玩下去的动力!
我在主场景上加上了一个CCLabelTTF,用于显示分数。
但是意外的发现,当内容含有中文时,CCLabelTTF的显示内容为乱码。
无奈只好Google百度寻求答案,明白了这个问题的缘由。
因为cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,如果添加L标志,则为Unicode编码。
解决这个问题有三种办法:
将源代码文件保存为utf8编码,不过由于编译器的问题,这种方式会导致很多无法预测的问题
将字符串用utf8编码集中存到一文件中,然后用代码读取这些字符串来使用,这种办法还能很好的支持多语言版本
使用字符串时,先将其转换为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解决中文乱码问题的几种办法相关推荐
- jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
从A页面通过url传参到B页面时,解析url参数可以用下面两种方法: 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(&q ...
- matplotlib解决中文乱码问题
matplotlib解决中文乱码问题的两种方法 1.Matplotlib的字体管理 通过指定字体来解决乱码问题,首先找到Windows的字体库所在位置我的是:"C:\Windows\Font ...
- cocos2dx java 乱码_[cocos2d-x] --- 完美解决中文乱码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一 介绍 最近由于各种各样的原因,好长时间没有学习cocos2d-x了.突然有种害怕的感觉,这样下去,以前学的关于cocos2d-x的一点皮毛会彻底忘记的 ...
- sqlserver mysql 乱码_SQLServer数据库如何解决中文乱码问题?方法有哪些?
很多使用数据库的人都知道,在安装SQLServer数据库是,如果设置不当就会出现一些中文乱码.主要原因是,很多人在使用默认安装系统时,一般不会考虑到默认排序的规则是拉丁文的排序规则,只是点击下一步,在 ...
- php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析
PHP读取文件,解决中文乱码UTF-8的方法分析,方法,中文,操作技巧,文本,本文 PHP读取文件,解决中文乱码UTF-8的方法分析 易采站长站,站长之家为您整理了PHP读取文件,解决中文乱码UTF- ...
- java txt中文乱码,JAVA读取TXT文件 可解决中文乱码问题
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- AJAX解决中文乱码问题
一.解决中文乱码问题的方法1:页面端发出的数据作一次encodeURI,如:encodeURI($("#userName").val() ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...
- js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...
最新文章
- 福利 | 送你一张通往「2019 AI开发者大会」的门票
- matlab能修图吗,相机上这个“功能”,不打开会影响修图效果,别等拍完照片才知道...
- jQuery ready(fn) 页面载入函数
- java 服务器发布_我如何在java中发布到服务器?
- 投资理财web后端系统_如何挑选现金类理财产品?三大对比了解一下
- 看门狗超时前在内核打印信息
- 中国聚合混凝土行业市场供需与战略研究报告
- MySQL【第三篇】数据类型
- 笔记:Chrome 对浏览器的改进
- 清华大学操作系统公开课笔记(向勇、陈渝)
- python整数缓存问题
- input和output哪个是充电_html中input和output的区别?糊涂了搞不清了。哪位给解说下...
- 电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...
- vue 调用移动录像_vue H5项目调用手机摄像头录像并上传
- java使用openoffice/libreoffice进行office转pdf
- IBM智慧存储厦门巡展发布Storwize RAS方案
- 删除按升序排列的单链表中的所有重复元素
- juniper RMA坏件返还流程
- win10怎么练计算机一级,1步打造极限精简的win10系统,让老电脑像新机般流畅,再也不卡了...
- 人工智能阿凡达平台发布,全力拥抱“元宇宙”
热门文章
- 计算机php什么意思,什么是PHPC(个人高性能计算机 )
- HTML如何让图片覆盖背景颜色,css – 使用rgba背景颜色覆盖背景图像
- php网页弹出图片,商城网站是如何单击头像直接弹出可以上传图片然后预览?
- java判断波动的曲线是否大体平衡_基于标的物价格和波动率的期权投资策略
- 接收服务器显示帧控制错误,Websocket连接关闭,出现错误“接收到意外的继续帧”...
- ie浏览器服务器ini文件在哪,怎么用IE浏览器打开电脑中的一个文件?
- java 路径 工具类,java 绝对路径工具类
- 回溯法排序树怎么画_kd tree(k-dimensional树的简称)
- 主角有智能芯片的种田小说_推荐3本克苏鲁类小说,压抑邪恶与搞笑逗乐并存,看看是你的菜吗...
- 【MySQL】(万字解析)MySQL表的增删改查(进阶-上)