【Cocos2d-X】中文乱码问题

初学Cocos就遇到了中文的显示问题,在使用CCLabelTTF调用系统字体时,出现的是乱码;使用CCLabelBMFont调用自己设计的fnt文件时,就会什么都不显示。百度了很久之后才明白,字体文件需要的中文得是UTF-8编码的,而项目又是Unicode,所以我们只需要把中文字符串的Unicode编码转化为UTF-8就行了。

Unicode转UTF-8函数:

char* EncodeToUTF8(const char* mbcsStr)
{
    wchar_t*  wideStr;
    char*     utf8Str;
    int       charLen;
    charLen = MultiByteToWideChar(936, 0, mbcsStr, -1, NULL, 0);
    wideStr = (wchar_t*)malloc(sizeof(wchar_t)*charLen);
    MultiByteToWideChar(936, 0, mbcsStr, -1, wideStr, charLen);
    charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
    utf8Str = (char*)malloc(charLen);
    WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);
    free(wideStr);
    return utf8Str;
}

使用示例:

CCLabelTTF* pLabel = CCLabelTTF::create(EncodeToUTF8("海贼王"), "Marker Felt", 24);

    CCLabelBMFont* label = CCLabelBMFont::create(EncodeToUTF8("海贼王"), "fonts/_chapter7.fnt",24);

    // position the label on the center of the screen

    pLabel->setPosition(ccp(origin.x + visibleSize.width/2 -100,
                            origin.y + visibleSize.height - pLabel->getContentSize().height));
    label->setPosition(ccp(origin.x + visibleSize.width / 2 + 100,
        origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(pLabel, 1);
    this->addChild(label, 1);

效果图:

时间: 2024-12-24 14:55:32

【Cocos2d-X】中文乱码问题的相关文章

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW

cocos2d-x封装一个转码的工具解决中文乱码可以直接拖过去用通用跨平台

今天白白给大家分享一个转码的工具函数,如果大家需要在项目中显示中文,可以直接使用,Android和IOS部分都是通用的,不用太麻烦的分平台操作. 转载请注明地址http://blog.csdn.net/u010229677 首先,这个函数是这样的,可以直接拖进去用 <span style="font-size:18px;"><span style="font-size:18px;">#ifndef __TRANSFORMUTF__ #defi

centos6.7下安装mysql5.6.22同时解决中文乱码问题

1.下载 http://dev.mysql.com/downloads/mysql/ 或者使用wget下载: wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar 2.安装 2.1.  检测是否已经安装了mysql rpm -qa | grep mysql 如果已经安装了,将其卸载,如: rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x8

XShell连接CentOS 7.2显示中文乱码问题的解决方法

背景 使用U盘往Windows主机.Linux主机传文件还是经常的事,但有时候文件名有中文, 传到Linux机器会有乱码,选择起来也很麻烦,最近刚好遇到,写下解决方法. 环境 Linux [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected]-base ~]# echo $LANG en_US.UTF-8 [[email protected]-ba

[oracle]解决centos 7下oracle的中文乱码问题

首先在形成中文乱码的原因是由于字符集不统一导致的,不同的字符集在转换的过程中必然要出现乱码,当然不排除可以转换.所以要解决中文乱码问题,思路是将输入.存储.显示等流程中涉及到字符集都统一为一种,对于oracle首先必须满足的先决条件是要服务端和客户段的字符集统一,若还不能解决问题,同时还要将系统的字符集与之统一,甚至导入或输入数据所使用的字符集统一. 看了网上的一些资料后,都说修改服务器的字符集风险比较大,确实,测试开发用还好说,假若是上线项目的服务器,那修改服务器字符集所带来的后果是不堪的,废

Oracle数据库中文乱码问题

最近碰到Oracle乱码问题,刚开始甚是头疼,以前在合肥出差的时候,这种问题也碰到过,当时直接抛给了“乌压压一片”(一个搞数据的同事儿),这次没办法躲过,只好硬着头皮上.虽然我这次碰到的是Oracle乱码问题中的一个,但是我决定将这个乱码问题整理清楚(不整清楚,就觉得身边有个定时炸弹,怕下次整数据库的时候会突然又爆炸). 解决这个问题的关键在于理解字符集的概念,所以在正文开始之前,有必要先提一下字符集的相关知识!(这部分知识,对于解决j2ee中文参数传递过程中出现的乱码,也非常具有参考意义) 一

linux下birt 图表中文乱码问题

birtChart 在linux下中文乱码的问题是Java虚拟机找不到中文字库字体文件造成的. 步骤: 1.把.bash_profile中的export LANG=zh_CN.GB2312修改为: export LANG=zh_CN.GB18030.因为gb2312不支持一些特殊的汉字. 2.在在生成的chart图表的XML Source里修改字体:把SansSerif修改为SimSun. 3.找到一个能在linux下使用的中文字体,可以是Windows 7下的c:\windows\fonts\

source insight3.5中文乱码解决方案

source insight3.5中文乱码,网上看别人说改变宽字体.宋体等方法都不起效.根本原因是,source insight 3.5 不支持Unicode编码,所以导致中文的乱码,将文件转为gb2312编码即可正常显示. 转码命令: iconv -c  -f utf-8 -t gb2312  utf8FileName  >>  newGb2321FileName

JSP学习笔记(三):解决JSP中文乱码问题

JSP开发应用过程中中文乱码是个比较常见的问题,其根源是:Web容器默认的字符编码格式是ISO-8859-1. 一.ISO-8859-1是不支持中文的.假如在保存JSP页面源码时遇到该错误,只要把JSP命令标签中的键值对"pageEncoding"的值ISO-8859-1改成"utf-8"(或UTF-8),当然是建议改成这样的编码格式,也可以改成GBK.这样就可以顺利保存源代码了. 二.get和post提交表单时遇到中文乱码问题的解决方案: (1)post提交:po

【中文乱码】jsp页面传值到后台中文乱码情况.

作为一名程序员,在项目中偶尔会遇到jsp传到后台出现中文乱码而不知所措.下面将讲解出现中文乱码的几种情况. 一.jsp页面没有设置编码格式, 二,后台没有在web.xml中字符编码过滤器, 三,在ajax提交的时候用get提交, 四,数据库连接的时候也可以试着加上字符编码, 五,所有的前台和后台字符编码必须一致.