Cocos2dx杂记:如何显示中文(2)
来源:互联网 发布:2017淘宝蓝海产品 编辑:程序博客网 时间:2024/05/22 07:41
在做跨平台开发的过程中,通常会遇到中文乱码问题。cocos2dx vs工程,C++源文件默认的就是ANSI编码,在编译到Android上运行的时候会出现乱码。在前面介绍过通过Plist文件读取的方式,可以实现中文的显示。这里介绍通过代码的形式实现该功能。
一、源程序
Tools.h
#include <string>using namespace std;class Tools {public: //wstring字符串转化为utf8 static void WStrToUTF8(string &dest, const wstring &src); //传入参数为string类型 static string ConvertStrToUTF8(const string &str); //传入参数为wstring类型 static string ConvertStrToUTF8(const wstring &str); //将string类型转换为wstring类型 static std::wstring StringToWstring(const std::string str, const std::string = "chs"); //将wstring类型转换为string类型 static std::string WstringToString(const std::wstring str, const std::string = "chs");};
Tools.cpp
#include "Tools.h"#include <cstdlib>#include <time.h>#include <string>#include <locale.h> //wstring字符串转化为utf8void Tools::WStrToUTF8(string &dest, const wstring &src) { dest.clear(); for (size_t i = 0; i < src.size(); i++){ wchar_t w = src[i]; if (w <= 0x7f) dest.push_back((char)w); else if (w <= 0x7ff) { dest.push_back(0xc0 | ((w >> 6) & 0x1f)); dest.push_back(0x80 | (w & 0x3f)); } else if (w <= 0xffff) { dest.push_back(0xe0 | ((w >> 12) & 0x0f)); dest.push_back(0x80 | ((w >> 6) & 0x3f)); dest.push_back(0x80 | (w & 0x3f)); } else if (sizeof(wchar_t) > 2 && w <= 0x10ffff) { dest.push_back(0xf0 | ((w >> 18) & 0x07)); // wchar_t 4-bytes situation dest.push_back(0x80 | ((w >> 12) & 0x3f)); dest.push_back(0x80 | ((w >> 6) & 0x3f)); dest.push_back(0x80 | (w & 0x3f)); } else dest.push_back('?'); }}//传入参数为string类型string Tools::ConvertStrToUTF8(const string &str) { string result; WStrToUTF8(result, StringToWstring(str)); return result;}//传入参数为wstring类型string Tools::ConvertStrToUTF8(const wstring &str) { string result; WStrToUTF8(result, str); return result;}//将string类型转换为wstring类型, 需包含locale、string头文件、使用setlocale函数。std::wstring Tools::StringToWstring(const std::string str, const std::string loc){ setlocale(LC_ALL, loc.c_str()); const char* _Source = str.c_str(); size_t _Dsize = str.size() + 1; wchar_t *_Dest = new wchar_t[_Dsize]; wmemset(_Dest, 0, _Dsize); mbstowcs(_Dest, _Source, _Dsize); wstring result = _Dest; delete[]_Dest; setlocale(LC_ALL, "C"); return result;}//将wstring类型转换为string类型std::string Tools::WstringToString(const std::wstring str, const std::string loc){ string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C"; setlocale(LC_ALL, loc.c_str()); const wchar_t* _Source = str.c_str(); size_t _Dsize = 2 * str.size() + 1; char *_Dest = new char[_Dsize]; memset(_Dest, 0, _Dsize); wcstombs(_Dest, _Source, _Dsize); string result = _Dest; delete[]_Dest; setlocale(LC_ALL, curLocale.c_str()); return result;}
二、使用方法
const std::wstring str = L"中文测试,你好,世界!"; log("str = %s", Tools::ConvertStrToUTF8(str).c_str()); const std::string str1 = "中文测试,你好,世界!"; log("str1 = %s", Tools::ConvertStrToUTF8(str1).c_str());
阅读全文
0 0
- Cocos2dx杂记:如何显示中文(2)
- Cocos2dx杂记:如何显示中文
- cocos2dx在windows下如何显示中文
- 利用cocos2dx 3.2开发消灭星星(六)如何在cocos2dx中显示中文
- cocos2dx 中文(韩文)显示方法
- cocos2dx 中文显示
- cocos2dx显示中文
- cocos2dx 3.3显示中文
- cocos2dx中文显示
- 关于cocos2dx 在wp8 中 如何显示中文
- Cocos2dx杂记
- cocos2dx如何显示控制台
- cocos2dx解析xml显示中文
- cocos2dx 3.1中显示中文
- Cocos2dx 3.2的中文显示
- cocos2dx CCLabelTTF显示中文乱码
- cocos2dx 3.4 Label中文显示
- (2)cocos2dx在windows环境下中文显示乱码
- java抽象类和接口的区别
- VertrigoServ & TestLink 安装使用过程
- 最全面的Android热修复技术
- Oracle问题——判断表是否在数据库中存在
- SAM I AM UVA
- Cocos2dx杂记:如何显示中文(2)
- springmvc的常见注解
- MDR外接设备的接线方式
- VS2013 opencv 视频读取灰屏
- js相关插件小应用以及css属性拓展
- python字典操作
- 上传去取文件名称
- selenium元素定位方法
- 技巧:删除桌面上提示找不到该项目的文件