Cocos2dx杂记:如何显示中文(2)

CocosCreator3.8研究笔记(一)windows环境安装配置 Visual Studio Code(以下简称 VS Code)是微软推出的轻量化跨平台 IDE,支持 Windows、Mac、Linux 平台,安装和配置非常简单。打开cocos编辑器 ,依次点击 file ->preferences->general->language->切换为中文。Cocos 编辑器偏好设置面板可以设置脚本编辑器,配置完成后,可以在资源管理器中双击脚本文件打开代码编辑器快速编辑代码。打开cocos编辑器 ,依次点击 文件 ->偏好设置->程序管理器->默认脚本编辑器。 阅读详情

在做跨平台开发的过程中,通常会遇到中文乱码问题。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字符串转化为utf8
void 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());

这里写图片描述

cocos2d-x 显示中文字符 实例源码 cocos2d-x 显示中文字符 实例源码,详情请移步到博客:http://codingnow.cn/program/1038.html 立即下载

相关推荐

cocos2d-x中文显示

cocos2d-x中文显示 cocos2d-x v2.2.0

cocos2d-x 显示中文字符和解析XML文件 转载

源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有时候也是为了更方便了。本文采用两种方案来解决这个问题:1. 使用iconv,引擎也提供了这个库,不过只是win32平台,移植到android上还得自己去下载iconv库编译。2. 把字符串写到xml...

weixin_33929309的博客 241

Unity AR开发实战:从Vuforia图片识别到实体识别全流程解析

增强现实(AR)技术通过计算机视觉算法将虚拟信息叠加到现实世界,其核心原理在于对现实环境的感知与理解。在移动端AR开发中,图像识别与物体识别是实现虚实融合的关键技术,它们决定了虚拟内容能否准确、稳定地与现实对象对齐。Vuforia作为成熟的商业AR SDK,为开发者提供了从平面图像识别(Image Target)到三维实体识别(Model Target)的完整解决方案,极大降低了计算机视觉技术的应用门槛。在工程实践中,Vuforia通过封装复杂的特征提取与匹配算法,使开发者能够专注于交互设计与内容制作,广泛

weixin_30972263的博客 301

cocos2d-x引入中文支持库并移植到android平台

cocos2d-x引入中文支持库并移植到android平台  2013-09-01 17:10:17|  分类: android |  标签:libiconv  iconv  cocos2d-x  中文  android  |字号大中小订阅 在cocos2d-x中直接使用中文会显示乱码,什么从xml文件读取中文,将文件格式保存为utf-8,都不是解决方法,会出现一些其

我的 1110

别再只会用QTcpSocket了!手把手教你用QSslSocket为你的Qt网络应用加上SSL/TLS加密(附完整代码示例)

本文详细介绍了如何将Qt网络应用从QTcpSocket迁移到QSslSocket,实现SSL/TLS加密传输。通过对比API差异、解析核心机制和提供完整代码示例,帮助开发者快速掌握安全网络编程技巧,有效防范数据窃听和中间人攻击等安全风险。

weixin_30654583的博客 400

Android malloc_debug实现原理及使用

2)设置 __libc_globals 对象中的 libc_globals.default_dispatch_table 和 current_dispatch_table 指向 malloc_dispatch_table,以后在 malloc 库函数里都会通过 GetDispatchTable(),这个函数就是返回的 current_dispatch_table 指针;MAX_FRAMES 表示被抓取的 frames 的数量,如果设为0, 表示在分配空间被释放时,不会抓取任何调用栈。

专注于系统快稳省领域 3737

Cocos Creator的Hello World

Cocos Creator的Hello World

三巧的博客 5847

BAPI_REPMANCONF1_CREATE_MTS实战:从MFBF事务码到精准零件反冲的代码级解析

本文深入解析了如何通过BAPI_REPMANCONF1_CREATE_MTS函数实现SAP生产模块中的零件反冲自动化。文章对比了MFBF事务码的手动操作与BAPI编程的优劣,详细拆解了函数的核心参数、数据结构、调用流程及事务控制,并提供了从数据准备到凭证获取的完整代码示例与避坑指南,帮助开发者实现高效、精准的批量投料过账。

weixin_29240343的博客 188

Cocos2dx杂记:如何显示中文

cocos2dx编译时经常会遇到中文乱码的问题,在cocos2dx下可以通过读取plist文件实现 1、plist文件strings.plist<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyL

小白的专栏 629

stm32f103c8t6+esp8266在WiFi下通过手机控制外设

stm32f103c8t6+esp8266在WiFi下通过手机控制外设前言 前言 通过上一篇,介绍了esp8266的基本功能,这篇将用stm32c8t6配合esp8266进行数据交互,实现用手机通过无线的方式去控制外设、开关等;这里相当于把stm32作为上一篇的串口助手和esp8266进行通信; ...

weixin_45430735的博客 1万+

[QMT和ptrade量化交易小白入门]-112、小市值热点概念交易策略,回测5年20倍

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1078

Cocos2dx-c++杂记

什么是Node类 Node类是Cocos2dx的基类,像游戏中的 场景类、精灵类、文本类、菜单类、层类 等都是继承自Node。 Node类详情 Node类的源文件目录 Node类的定义文件目录:Cocos2dx根目录\cocos2d\cocos\2d\CCNode.cpp Node类的文件声明目录:Cocos2dx根目录\cocos2d\cocos\2d\CCNode.h Node类的一些常用属性 Vector<Node *> _children; ///< 存放子元素的数组 int _t

qq_19864679的博客 2310

【2026年华为暑期实习-非AI方向(通软&嵌软&测试&算法&数据科学)- 7月15日-第二题- 手机多载波冲突选择】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文提出了一种解决手机基站载波选择问题的回溯算法。给定N个载波,每个载波具有带宽和所属频段,要求选择最多K个载波,满足:1) 不选择同一频段的多个载波;2) 不选择冲突频段的载波;3) 总带宽最大化。算法通过预处理冲突关系,使用位掩码优化冲突检查,按编号顺序回溯枚举所有可能组合。当找到更大带宽或相同带宽但字典序更小的组合时更新答案。该方法在N≤25和K≤8的约束下高效可行,并通过样例验证了正确性。输出为最大总带宽和对应的最优载波编号序列。

m0_73659489的博客 71

Cocos2dx杂记

Cocos2dx各版本最新离线API文档下载 http://www.cocoachina.com/bbs/read.php?tid-199055-keyword-API.html cocos2d-x-2.1.4安卓编译环境配置 http://www.cnblogs.com/sanjin/p/3275350.html

星宇的专栏 379

AI + 药物临床试验研发赛道

研究日期:2026-07-09 | 研究主题:AI + 药物临床试验研发赛道 | 聚焦岗位:Agent 平台架构师 / AI 工程架构师。

AI天才研究院 144

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Cocos2dx杂记:cocos2dx 文本布局UI

在开发游戏的过程中,UI布局是游戏必不可少的一部分。Cocos2dx游戏一般可以使用Cocostudio进行布局。简单的布局有时候可以采用文本方式。下面简单介绍下文本布局。 所谓的文本布局方式就是一个简单的Json文件,通过解析Json文件来进行调用。简单页面可以很快的实现,可以让代码和UI布局分离。一、数据格式解析的数据简单的分为:精灵“Sprite”,文本“Label”,菜单“Menu”等,可

小白的专栏 584

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Cocos2dx杂记:cocos2dx 3.14.1 Spine 处理与 cocos2dx3.10 Spine的区别

一、在游戏中经常用到Spine动画,在cocos2dx 3.10之前创建Spine动画可以采用1、第一种方式auto spine = SkeletonAnimation::createWithFile("spine.json", "spine.atlas");但是当json文件过大时每次解析会消耗大量时间导致卡顿2、第二种方式//获得数据 spAtlas* _atlas = spAtlas_crea

小白的专栏 8662

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Cocos2dx杂记:PhysicsEditor 对应cocos2dx 3.x的接口封装

PhysicsEditor是一款box2d形状生成器,只需点点鼠标即可生成plist图形文件,还有很有特色的魔术棒工具,可自动完成标记定点和分隔polygon的过程。可以直接在cocos2dx中使用。 如图所示:可以对边缘进行不规则图形的选取官方提供了Cocos2dx的第三方库,但是采用的是2.x的接口,3.x下面依然是可以使用的,不过在这添加了采用3.x接口封装的方法void GB2ShapeC

小白的专栏 597

cocos2dx2.x杂记之CCSpriteBatchNode

什么是CCSpriteBatchNode 作用上,按自己的理解就是,将所有具有相同纹理的精灵当成一个“节点”,区别是:这个节点有多份需要渲染的纹理。在递归渲染遍历到这个CCSpriteBatchNode节点 的时候,跟引擎一般的渲染机制不同,它只有一个“入口”,在draw之前的比如kmGLPushMatrix()等就是入口。只有一个“出口”,draw之后的kmGLPopMatrix()等。之间

JackieLiu的专栏 732

cocos2dx 入门练习杂记 - 备用

菜单方式创建按钮 CCLabelTTF *label = CCLabelTTF::create("BTN-TEST", "Arial", 20); // 创建按钮显示文本 CCMenuItemLabel *myBtn = CCMenuItemLabel::create(label, this, menu_selector( HelloWorld::btnTest ) );...

weixin_34290352的博客 133

Cocos2dx杂记:Tiledmap读取

瓦块地图编辑器Tiled在游戏制作中是比较通用的了,cocos2dx支持载入TiledMap,以cocos2d 3.x版本为例 1、加载瓦块地图: //读取 auto m_pTileMap = TMXTiledMap::create("test.tmx"); m_pTileMap->setPosition(Vec2::ZERO); this->addChild(m_p

小白的专栏 2984

Cocos2dx杂记:box2d初探

1、 所需头文件#include "Box2D/Box2D.h" 2、创建一个物理世界每个box2d游戏都有一个物理世界,下面创建一个与场景一样大小的物理场景。在该物理场景中box2d绑定的物体将满足基本物理属性bool HelloWorld::initPhysics() { Size s = Director::getInstance()->getVisibleSize(); //重

小白的专栏 590

Cocos2dx杂记:推小球,box2d与TiledMap的使用

前面介绍了box2d和tiledmap 下面以一个物理游戏Demo为例来介绍下box2d与TiledMap基本使用方式1、Demo运行截图(Demo素材收集与网络,如有侵权请告知删除)2、游戏功能介绍点击蓝色的物体变成小球把红色的球推下去,并且吃掉场景中的星星,右面三角形的是跷跷板,没什么作用,大家当做不存在就好。。。3、目录结构 Constants.h 中定义了像素和米数的比 GL

小白的专栏 1293

Cocos2dx杂记:cocos2dx解析csv格式文件

游戏存储或者配置经常使用到逗号分隔文件,如何实现解析呢?下面直接上代码1、头文件CSVParser.h#pragma once #include "cocos2d.h" #include <vector> #include <string> using namespace std;USING_NS_CC;namespace CSVParser { // 每一行的记录 class Ro

小白的专栏 993

cocos2dx杂记

//获取时间 头文件:#include <time.h>定义函数:struct tm *localtime(const time_t * timep);函数说明:localtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。结构tm 的定义: struct tm {// int tm_sec...

weixin_33747129的博客 78
上一篇: Cocos2dx杂记:cocos2dx 文本布局UI
下一篇: Cocos2dx杂记:cocos 编译命令拷贝so文件
胖胖的战士
博客等级 码龄18年 104粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值