cocos2d-x实战 C++卷 学习笔记--第4章 win32平台下中文乱码问题
前言:
将GBK编码的字符串转为UTF-8编码。(通俗点说就是解决中文乱码问题)
简要介绍:
在Win32平台下通过 log 输出中文字符时,会出现中文乱码问题。同样的代码在 ios 和 Android 下就没有问题。这个问题究其根本是因为默认情况下Windows中文环境是采用GBK编码,源程序文件HelloWorldScene.cpp 编码默认也是 GBK,如果源程序代码中有中文,它的字符集是GBK,需要将中文字符GBK 编码 转为 UTF-8 编码。
为此,添加一个MyUtility类,并在 MyUtility类中编写编码转化函数gbk_2_utf8。该函数是静态函数,不需要实例化MyUtility类就可以直接使用。
它 的作用是将 GBK格式编码转化成UTF8.
//// MyUtility.h 文件
#ifndef _MY_UTILITY_H_
#define _MY_UTILITY_H_
#include "cocos2d.h"
using namespace std;
class MyUtility
{
public:
static string getCurrentTime();
static string gbk_2_utf8(const string text);
};
#endif // _MY_UTILITY_H_
//// MyUtility.cpp 文件
#include "MyUtility.h"
string MyUtility::getCurrentTime()
{
time_t t;
time(&t);
] = { };
strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime((&t)));
string timeStr = tmp;
return timeStr;
}
/// 在win32平台下,将 GBK 编码 转为 UTF-8
string MyUtility::gbk_2_utf8(const string text)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
//采用 Lambda表达式,将 string 转换成 wstring . Lambda表达式,通俗的解释就是,一个匿名函数.
wstring tes = [=]()
{
setlocale(LC_ALL, "chs");
const char* _Source = text.c_str();
size_t _Dsize = text.size() + ;
wchar_t* _Dest = new wchar_t[_Dsize];
wmemset(_Dest, , _Dsize);
mbstowcs(_Dest, _Source, _Dsize);
std::wstring result = _Dest;
delete[] _Dest;
setlocale(LC_ALL, "C");
return result;
}();
, tes.c_str(), tes.size(), NULL, , NULL, NULL);
)
{
return string();
}
char* resultString = new char[asciSize];
, tes.c_str(), tes.size(), resultString, asciSize, NULL, NULL);
if (conveResult != asciSize)
{
return string();
}
string buff = "";
buff.append(resultString, asciSize);
delete[] resultString;
return buff;
#else
return text;
#endif
}
/// HelloWorldScene.cpp 中的代码片段
/// 日志中乱码问题
__String* strLog = __String::create("hello, 晚上好! Everyone!");
const char* cns;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
std::string sns = MyUtility::gbk_2_utf8(strLog->getCString());
cns = sns.c_str();
#else
cns = strLog->getCString();
#endif
log("%s", cns);
cocos2d-x实战 C++卷 学习笔记--第4章 win32平台下中文乱码问题的更多相关文章
- cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类
前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类 __String . 使用cocos2d::__Str ...
- cocos2d-x实战 C++卷 学习笔记--第7章 动作、特效(一)
前言: 介绍cocos2d-x中的动作.特效. 动作: 动作(action)包括基本动作和基本动作的组合,这些基本动作有缩放.移动.旋转等,而且这些动作变化的速度也可以设定. 动作类是 Action. ...
- cocos2d-x实战 C++卷 学习笔记--第6章 场景与层
前言: 一个场景(Scene)是由多个层(Layer)组成,而且层的个数要至少是1,不能为0. 场景切换 场景切换相关函数 1)void runWithScene(Scene* scene) 该函 ...
- cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单
前言: 菜单中包含菜单项,菜单项类是 MenuItem ,每个菜单项都有三个基本状态:正常.选中和禁止. (MenuItem)菜单分类: (文本菜单)MenuItemLabel : MenuItemA ...
- cocos2d-x实战 C++卷 学习笔记--第5章 精灵
前言: 精灵类是Sprite类.它的子类有PhysicsSprite 和 Skin. PhysicsSprite 是物理引擎精灵类,而Skin是皮肤精灵类,用于骨骼动画. 创建Sprite精灵对象 创 ...
- cocos2d-x实战 C++卷 学习笔记--第4章 使用标签
前言: 介绍cocos2d-x中 标签类. cocos2d-x中 标签类 主要有三种:LabelTTF, LabelAtlas, 和 LabelBMFont.此外,在Cocos2d-x 3.x之后推出 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
随机推荐
- [OC Foundation框架 - 2] NSString 的创建
A. 不可变字符串 void stringCreate() { //Don't need to release memory by this way NSString *str1 = @"S ...
- Visual Studio中的Build Event
在VS中,进行build时,可以在build之前,或者之后执行一些操作,比如把一些css,font,images文件从一个项目的文件夹复制到另一个项目的文件夹 方法: 点击项目,右键-属性-Build ...
- 转载 ASP.NET MVC中使用ASP.NET Identity
转载原地址: http://blog.jobbole.com/90695/ 在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identit ...
- MSSQLSERVER数据库- 作业调度定时备份数据库
作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 ) DECLARE @da ...
- React-native 中的触摸响应功能
我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this. ...
- ecshop中index.dwt文件分析
对于ecshop新手来说,这篇总结值得关注. 对于没有web编程基础的同学来说,ecshop模板里面有两个文件特别重要, 但是这两个文件同时也很不好理解,分别是index.dwt和style.css. ...
- ecshop数据库表结构
ecs_account_log //用户账目日志表 ecs_activity //活动表(代码,名称,开始,结束,描述) ecs_ad //广告表(位置,类型,名称,链接,图片,开始,结束,广告主相关 ...
- 通过Wifi调试Android应用
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- cdoj 383 japan 树状数组
Japan Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/383 Descrip ...
- js jquery 等的地址
jquery在线地址(jquery地址):http://code.jquery.com/jquery-latest.js js人脉图(关系图)插件: http://js.cytoscape.org/