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框架写流程化的应 ...
随机推荐
- light oj 1008 - Fibsieve`s Fantabulous Birthday
1008 - Fibsieve`s Fantabulous Birthday PDF (English) Statistics Forum Time Limit: 0.5 second(s) Me ...
- [iOS基础控件 - 6.6.1] 展示团购数据代码
1.主控制器: // // ViewController.m // GroupPurchase // // Created by hellovoidworld on 14/12/3. // Cop ...
- Web 应用的安全性
Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分.用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.用户授权 ...
- 也谈SSO,一个简单实用的单点登录Demo
关于SSO(单点登录),百度百科解释如下 : “SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要 ...
- pyinstaller打包第一个wxPython程序HelloWorld
pyinstaller 打包hello 7Mb ================= www.pyinstaller.org pip install pypiwin32 pip install pyin ...
- iOS中的深复制与浅复制
很多语言中都有深复制浅复制的概念,如C++,ObjC等.简单来说,浅复制就是两个变量指向了同一块内存区域,深复制就是两个变量指向了不同的内存区域,但是两个内存区域里面的内容是一样的. 浅复制示意图: ...
- Nuget控制台 - 给你的快速添加缺少的包
利用命令行安装包
- Rank of Tetris(hdu1811拓扑排序+并查集)
题意:关于Rating的信息.这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rati ...
- ORACLE 毫秒与日期的相互转换
毫秒转换为日期 SELECT TO_CHAR(1406538765000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY- ...
- [Practical Git] Clean up commits with git rebase
Sometimes its nice to clean up commits before merging them into your main code repo; in this lesson, ...