关闭

Cocos2dx 中文乱码的解决方法

标签: Cocos2dx中文乱码解析xml
1915人阅读 评论(0) 收藏 举报
分类:

问题与解决方法

在windows环境下使用visual studio 开发cocos2d-x,由于visual studio 默认编码为GBK 格式,而cocos2d-x引擎默认编码为UTF-8, 如果有用到中文,在游戏运行时有可能会出现乱码的情况,这个问题一般有三种解决方案,如下

1、将源码文件保存为utf-8格式(不建议,治标不治本)

2、自己编写编码转换代码,或者使用Cocos2dx的库。

使用iconv,引擎也提供了这个库,不过只是win32平台,移植到android上还得自己去下载iconv库编译。

3、将显示文本单独保存为文本文件(该文件编码为utf-8),由系统统一模块管理文本读取显示,建议使用这种方式,便于后期系统维护,并实现国际化。(推荐)

strings.plist

http://blog.csdn.net/z309241990/article/details/26976619

把字符串写到xml文件中,然后解析xml文件,格式按照android中的strings.xml。这是一种更好的做法,特别是需要提供国际化支持时。

http://blog.csdn.net/zhanghefu/article/details/21288451

缺点:

方法一:可能导致其它未知错误。

方法二:win32和Android都需要转换,而且编码转换库会使安卓apk变大。

方法三:虽然实现有点麻烦,但是是较完善的解决方法。


cocos2d-x3.0从XML读取中文

转载自:http://www.xuebuyuan.com/1482775.html

保存的XML文件放到resources文件夹里,具体格式自己定,但要是uft8的。比如:

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<dict>
    <key>shop_info1</key>
    <string>猛犸</string>
    <key>shop_info2</key>
    <string>慢慢</string>
</dict>

解析代码也很少:

<pre name="code" class="cpp">// 解析xml获取值
CCDictionary* strings = CCDictionary::createWithContentsOfFile("String.xml");		// xml文件加载为CCDictionary对象
const char *shop_info1 = ((String*)strings->objectForKey("shop_info1"))->getCString();	// 通过键来获取值

经过验证,cocos3.2版本的也能运行。

不过CCDictionary是cocos2.x版本的数据结构,3.x版本较少使用。


官网解析xml方法  

Cocos2d-x 已经加入了tinyxml2用于xml的解析。3.0版本位于external/tinyxml2下。2.x版本位于cocos2dx/support/tinyxml2下。

引入头文件

#include "tinyxml2/tinyxml2.h"
using namespace tinyxml2;

xml解析

void HelloWorld::parseXML(const char *fileName)
{

std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;
XMLDocument *pDoc = new XMLDocument();
XMLError errorId = pDoc->LoadFile(filePath.c_str());

if (errorId != 0) {
    //xml格式错误
    return;
}

XMLElement *rootEle = pDoc->RootElement();

//获取第一个节点属性
const XMLAttribute *attribute = rootEle->FirstAttribute();
//打印节点属性名和值
log("attribute_name = %s,attribute_value = %s", attribute->Name(), attribute->Value());

XMLElement *dicEle = rootEle->FirstChildElement("dic");
XMLElement *keyEle = dicEle->FirstChildElement("key");
if (keyEle) {
    log("keyEle Text= %s", keyEle->GetText());
}

XMLElement *arrayEle = keyEle->NextSiblingElement();
XMLElement *childEle = arrayEle->FirstChildElement();
while ( childEle ) {
    log("childEle Text= %s", childEle->GetText());
    childEle = childEle->NextSiblingElement();
}

delete pDoc;

}

在节点解析过程中,注意对获取到的节点进行判空处理。

解析结果打印

cocos2d: attribute_name = version,attribute_value = 1.0
cocos2d: keyEle Text= Text
cocos2d: childEle Text= Cocos2d-x
cocos2d: childEle Text= Cocos2d-x
cocos2d: childEle Text= Cocos2d-x







0
0
查看评论

【Cocos2dx】中文乱码问题

Cocos2dx的中文乱码问题,造成原因是VS将其以GBK编译,而Cocos2dx本身的引擎是UTF-8,所以非西欧字符会出现乱码。谁让cocos2d-x是由cocos2d而来,而cocos2d这东西是老外写的呢?引擎的编写者根本没有考虑这点。 解决的方式有很多种,比如在VS写一段转码函数,引入Co...
  • yongh701
  • yongh701
  • 2015-09-02 11:51
  • 1116

Cocos2dx中文乱码问题

最开始在网上找的一个方法,结果在wp8上报错~ 在windows环境下使用visual studio 开发cocos2d-x,由于visual studio 默认编码为GBK 格式,而cocos2d-x引擎默认编码为UTF-8, 如果有用到中文,在游戏运行时有可能会出现乱码的情况,这个问题一般...
  • z309241990
  • z309241990
  • 2014-05-25 20:10
  • 10645

cocos2dx 显示中文的三种方法

//随便在cpp中写下列函数,不用再.h文件声明 BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize) {  DWORD dwMinSize;  dwMinSize = WideCharToMultiB...
  • cwn0812
  • cwn0812
  • 2013-03-15 18:18
  • 2866

cocos2dx 3.4 Label中文显示

第一种方式: Label* a = Label::createWithSystemFont("中国", "宋体", 30); a->setPosition(Point(100, 200)); addChild(a);  这种方式...
  • u014626120
  • u014626120
  • 2015-04-21 10:59
  • 1406

cocos2dx 3.2 解决输入框(TextField,TextFieldTTF) 中文乱码问题

cocos2dx 输入框中文乱码
  • xie1xiao1jun
  • xie1xiao1jun
  • 2014-08-20 21:03
  • 9251

cocos2dx在写中文字体的时候出现乱码

有时候,根据程序的需要,可能会
  • ganpengjin1
  • ganpengjin1
  • 2015-05-26 13:30
  • 1187

cocos2dx: win32程序Release和debug版本:lua:print函数

cocos2dx: win32程序Release和debug版本:lua:print函数 1、如果发布的是Release版本,lua脚本中通过print(...)函数打印的 信息是看不到的,这样不方便程序查看出错的地方。 2、发布Debug版本可以查看这些打印信息。
  • tianxiawuzhei
  • tianxiawuzhei
  • 2015-06-12 15:17
  • 2602

cocos2dx3.3显示中文

参考:http://www.2cto.com/kf/201404/295851.html 参考:http://blog.csdn.net/evankaka/article/details/43449943 #ifndef __ChineseString_H__    ...
  • u010434924
  • u010434924
  • 2015-02-04 17:18
  • 512

windows下 cocos2dx CCLOG 打印中文变为问号的解决办法

此方法用到Windows库下的函数MultiByteToWideChar和WideCharToMultiByte,直接用的方法就是直接引用cocos2d.h即可 下面贴出函数 std::string U2G(const char* utf8) { int len = MultiByteToW...
  • jiao2342016
  • jiao2342016
  • 2017-04-01 10:41
  • 422

cocos2dx 3.1中显示中文

这个问题网上有很多解决方法,参考
  • bszk81340089
  • bszk81340089
  • 2014-07-19 14:35
  • 755
    个人资料
    • 访问:28798次
    • 积分:456
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:46篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论