在用vs开发cocos2dx过程中。要显示的中文,要求是UTF-8格式的才干正常显示出来。但VS通常是ANSI格式保存,这样,在代码中写入的中文字符串,执行后。显示的就是乱码。

为了正确显示中文。或支持多语言,我这里定义一个简单的字符串管理类,来满足上述要求。

这个类使用了我的开源码中的XAnsiString和XMap。TextIni这几个类。能够在我的开放代码找到下载。

以下是代码://字符串资源管理器

#ifndef _X_STRING_MANAGER_H_

#define _X_STRING_MANAGER_H_

#include <xstring.h>

#include <xini.h>

#include <xmap.h>

#include <xset.h>

#include <xsingleton.h>

namespace zdh

{

    typedef XMap<XAnsiString, XAnsiString> TStringKeyValue;

    typedef XMap<XAnsiString, TStringKeyValue> TStringSection;



    class XStringMgr

    {

    public:

        XStringMgr()

        {}

        ~XStringMgr()

        {

            m_Map.Clear();

        }

        XInt Load(const XAnsiString & paramFileName, bool paramClear = true)

        {

            if (paramClear) m_Map.Clear();

            XIniText stIni;

            if (!stIni.Load(paramFileName)) return ERR_FAIL;

            for (int i = 0; i < stIni.getSectionCount(); i++)

            {

                XIniText::TSection * pSection = stIni.getSection(i);

                

                TStringKeyValue & stKeyValue = m_Map[pSection->getSectionName()];

                for (int j = 0; j < pSection->getLength(); j++)

                {

                    XIniText::TEntry * pEntry = pSection->getEntry(j);

                    if (isNULL(pEntry)) continue;

                    if (pEntry->getEntryType() != EIET_COMMON_ENTRY) continue;

                    XIniText::TEntryCommon * pCommonEntry = dynamic_cast<XIniText::TEntryCommon *>(pEntry);

                    if (isNULL(pCommonEntry)) continue;

                    stKeyValue[pCommonEntry->getKey().getField()] = pCommonEntry->getValue().getField();

                }

            }

            return ERR_OK;

        }

        //取指定字符串对象。假设不存在,返回NULL

        const XAnsiString * getStringEx(const XAnsiString & paramSection, const XAnsiString & paramKey)

        {

            int iSectionIndex = m_Map.getIndexBykey(paramSection);

            if (!m_Map.isValidIndex(iSectionIndex)) return NULL;

            const TStringKeyValue & stKeyValue = m_Map.getValue(iSectionIndex);

            int iValueIndex = stKeyValue.getIndexBykey(paramKey);

            if (!stKeyValue.isValidIndex(iValueIndex)) return NULL;

            return &stKeyValue.getValue(iValueIndex);

        }

        //取指定的字符串,假设不存在,则返回空串

        const char * getString(const XAnsiString & paramSection, const XAnsiString & paramKey)

        {

            const XAnsiString * pRet = getStringEx(paramSection, paramKey);

            if (isNULL(pRet)) return "";

            else return pRet->c_str();

        }



        const TStringSection & getMap() const

        {

            return m_Map;

        }



    private:

        TStringSection m_Map;

    };

}

    #define STRING_MGR zdh::XSingletonSample<zdh::XStringMgr, 0>::getInstance()

    #define STRING_SECTION_MAIN "main"

    #define STRING_PLAY (STRING_MGR->getString(STRING_SECTION_MAIN, "play"))

    #define STRING_FONT (STRING_MGR->getString(STRING_SECTION_MAIN, "font"))

#endif

使用样例

    XAnsiString strStringMgrFileName("string_zh.ini");

    if (zdh::isNotOK(STRING_MGR->Load(strStringMgrFileName)))

    {

        STREAM_INFO << "load "<<strStringMgrFileName << "Fail!";

        return false;

    }

    else

    {

        STREAM_INFO << "Load String:" << STRING_PLAY;

    }

[cocos2dx笔记005]一个字符串管理配置类的更多相关文章

  1. [cocos2dx笔记013]一个使用CCRenderTexture创建动态纹理显示数字的类

    用CCLabelTTF显示的数字不好看.于是就想到用图片来代理.眼下网上的实现都是把每一个数字做一个CCSprite组合的方式. 可是我想.动态生成纹理的方式.没有就仅仅好自己手动写一个. 头文件 # ...

  2. struts2学习笔记——第一个struts2应用配置

    说实在的,随着Java学习的不断深入,特别是Java web框架部分,调bug让人很心累,但是每征服一个bug,内心的成就感也是难以言说的.第一个struts2应用的配置,我昨天折腾了快2个小时,最后 ...

  3. spring框架中的一个字符串的工具类

    stringutils.hasText("字符串") 如果字符串里面的值为null, "", "   ",那么返回值为false:否则为tr ...

  4. 开发笔记-记一个基础logback配置

    <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true&q ...

  5. spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

  6. C#简单配置类及数据绑定

    目录 简介 配置基类 派生配置类 数据绑定 Winform中的数据绑定 WPF下的数据绑定 附件 简介 本文实现一个简单的配置类,原理比较简单,适用于一些小型项目.主要实现以下功能: 保存配置到jso ...

  7. [cocos2dx笔记012]一定简易的UI配置类

    使用cocostudio能够装载编辑好的UI,可是过于复杂.特别是在加截UI后,发现触屏事件有些问题. 假设直接使用程序写死载入UI又过于麻烦.花点时间,添加了一个基于ini的UI配置类,眼下仅仅实现 ...

  8. 【cocos2d-x 3.x 学习笔记】对象内存管理

    内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...

  9. cocos2d-x lua 实现单例(管理类)

    cocos2d-x lua 实现单例(管理类) version: cocos2d-x 3.6 示例代码 local DogManager = class("DogManager") ...

随机推荐

  1. linux文件系统挂载

    接上一篇博客 创建好了文件系统的磁盘仍然是不能用的,必须挂载到某个目录下才能使用 [root@gechong mnt]# ll /dev/sdb* brw-rw----. root disk , 11 ...

  2. 在jsp页面上打印错误堆栈

    try{ .................... } catch(Exception e){ //定义一个流 ByteArrayOutputStream ostr = new ByteArrayOu ...

  3. oracle 11g完美卸载

      oracle 11g完美卸载 CreateTime--2018年4月22日17:07:19 Author:Marydon 对于oracle数据库的卸载,一定要卸载干净,否则,再次想装oracle时 ...

  4. CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  5. 如何在MyEclipse中将项目部署Tomcat

    如果系统里面还没有配置Tomcat,请参照<Windows下如何配置tomcat环境变量>. 1.新建一个web project项目.如下: 效果如下: 2.编写一个实现Servlet接口 ...

  6. echo “新密码”|passwd --stdin 用户名

    --stdin This option is used to indicate that passwd should read the new password from standard input ...

  7. 待字闺中之快排单向链表;leetcode之Sort List

    题目来源.待字闺中.原创@陈利人 .欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的高速排序一样,都须要找到一个pivot元素.或者节点. 然后将数组或者单向链表划分为 ...

  8. 转:【HTTP】常见错误码说明

    一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明100 ...

  9. MySQL插入性能优化

    目录 MySQL插入性能优化 代码优化 values 多个 一个事务 插入字段尽量少,尽量用默认值 关闭 unique_checks bulk_insert_buffer_size 配置优化 inno ...

  10. iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due

    最近运行APP,发现了这个问题,本着宁可错看,不可放过的原则,上stackoverFlow学习了一下: 链接:http://stackoverflow.com/questions/38458170/i ...