在用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. ubuntu server 安装 question2answer 及 汉化包

    ubuntu server 安装 question2answer 及 汉化包 question2answer 是一个非常简洁方便的问答系统,可以用它快速的部署一个问答社区,提高在开发中的交流沟通效率: ...

  2. E信通项目总结[转]

    http://ucd.leju.com/index.php/ouba2/    

  3. 每日一句英语:怎样回答美国人的How is it going问候语?

    和中国人"吃了吗"是一个性质,本质上仅仅是个话题的起始点,而不是真的想知道你吃了没有. 美国人打招呼有几种方式: 不太熟的人:How are you? 一 般说 pretty go ...

  4. Java Web开发基础(3)-JSTL

    在DRP项目中接触到了JSTL标签库,对我这样的比較懒的人来说,第一感觉就是"惊艳". JSTL标签库的使用.能够消除大量复杂.繁复的工作.工作量降低的不是一点半点.是降低了一大半 ...

  5. jsp中的js嵌入Extjs与后台action交互

    近期做前台须要和后台交互数据,直接使用js一直没实现.最后使用extjs实现了,extjs代码直接嵌入到jsp的js代码中就可以(0跟jsp里使用extjs一样,须要载入extjs的几个文件) < ...

  6. spring 中常用的配置项

    1.spring 中常用的配置项 application.properties #端口 server.port=8081 #调试模式 debug=false #上下文 #一般情况下,小项目通常都是在t ...

  7. html中切记ID不能重复

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. 获取TrustedInstaller

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取TrustedInstaller权限& ...

  9. C# 获取今天,昨天,上周,下周,上月,下月等等一些日期格式

    C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了 今天                             DateTime.Now.Date ...

  10. c中的static

    static的作用 1)保持变量值:在函数体,一个被声明为静态的变量在这一函数中可以维持其值.这句话可能描述不太准确,大家看下面这个例子吧. void staticLocalVar() { stati ...