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框架写流程化的应 ...
随机推荐
- jquery-ui 之Sortable详解
<div class="aaa"> <ul id="sortable"> <li id="test">I ...
- 关于 android的 渲染器 Shader
因为公司在 自定义的画图上面比较苛刻(各种要求= =),最后又是改来改去的.反正是 Shader起到很大作用,特此记录一下下.在achartengine的基础上没有能满足他们= = androd 提供 ...
- C 高级编程4 makefile 与 IO
make 与 makefile .目标的语法 目标名:依赖目标 @命令 @命令 make的命令行使用 make -f make 脚本文件 目标名 .目标的划分 demo.mk demo: gcc -c ...
- 在javascript中关于submit和button提交表单区别
submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了,submit和button,二者都以按钮的形式展现,看起来都是按钮,所不同的是type属性和处发响应的事件上. ...
- Ambiguous mapping found. Cannot map 'xxxxController' bean method
1.背景 今天要做一个demo,从github上clone一个springmvc mybatis的工程(https://github.com/komamitsu/Spring-MVC-sample-u ...
- springMVC学习笔记三
十三.springMVC和spring集成 配置文件,spring的配置路径applicationContext.xml 在默认的web-inf下面 strut的配置文件默认在src下面 用了什么框架 ...
- ios通知-kvo
// KVC: Key Value Coding, 常见作用:给模型属性赋值 // KVO: Key Value Observing, 常用作用:监听模型属性值的改变 // // ViewCon ...
- 数据导入问题:[Err] [Imp] 1406 - Data too long for column 'linkman' at row 20 [Err] [Imp] INSERT INTO `excel_eprinfo`
导入数据:提示错误 [Err] [Imp] 1406 - Data too long for column 'linkman' at row 20[Err] [Imp] INSERT INTO `ex ...
- Linux系统常见的压缩命令
*.Z compress 程序压缩的文件: //在当前的Linux主流版本中都已经默认没有支持该压缩命令了,因为gzip命令已经取代了compress命令了 *.gz gzip 程序压缩的文件: *. ...
- J2EE综合:如何处理大数据量的查询
在实际的任何一个系统中,查询都是必不可少的一个功能,而查询设计的好坏又影响到系统的响应时间和性能这两个要害指标,尤其是当数据量变得越来越大时,于是如何处理大数据量的查询成了每个系统架构设计时都必须面对 ...