在用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. redis可视化管理工具Redis Desktop Manager

    Redis Desktop Manager 官方下载地址:https://redisdesktop.com/download

  2. Python编程-基础知识-List

    Negative Indexes(负索引) >>> spam = ['cat', 'bat', 'rat', 'elephant'] >>> spam[-1] 'e ...

  3. Silverlight 之 创建

          Silverlight 项目文件是您可以使用不同工具来创建和编辑的文本文件.例如,可以使用 Visual Studio 2010 以及 Expression Blend 来创建 Silve ...

  4. C++运行库 Neptune C++ Runtime Library(xbmc)

    一个可以在多个平台C++开发环境下编译运行的C++运行库.其中包括了对多个C++库和平台SDK(HTTP/TCP/UDP/XML, Thread/Message, String, List/Stack ...

  5. tar 归档中找不到

    今天在解压tar.gz包时遇到的错误: 刚开始以为是路径的问题,然后感觉是tar.gz包的问题,后来查了一下才知道,记录一下: 一定要加上那个-C   参数表示更换目录的意识 -C    --dire ...

  6. SpringMVC通过邮件找回密码功能的实现

    1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密 ...

  7. cookie 设置有效期 检测cookie

    设置cookie 函数直接上代码: function setCookie(name, value, days) { //设置cookie var d = new Date(); d.setTime(d ...

  8. rEFind 教程

    资料 在空白区右键,新建一个文件,命名为rEFind! 双击进入rEFind文件夹,我们开始搬文件了! 解压refind.zip 创建一个文件,仿照refind.conf-sample写一个文件,命名 ...

  9. result_charts

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. XMLHttpRequest cannot load ...谷歌浏览器跨域问题

    HTML页面通过Ajax调用公网web服务时,浏览器请求发送成功,但是响应的 xhr.status==0,控制台报错如下 XMLHttpRequest cannot load http://ws.we ...