在cocos2d中如果输入中文,在场景中会显示出乱码,这是因为编码方式的问题,解决这个问题的放大也不是很难,而且代码能反复使用比较简单,易于操作
这篇博客只能算是部分原创,因为这里我借鉴了 原始出处 我借鉴了一些代码,希望大家转载时也能尊重原创,在这里我说明的会更加详细一些,对于新手或是不是很熟练的人来说还是很有帮助的,高手忽略我...
第一步:
我们需要新建一个cpp文件和一个.h文件,起名字叫做Tools,这个里边放的就是我们转码需要的工具代码
(1) Tools.h
#ifndef _TOOLS_H_
#define _TOOLS_H_
//中文转码
#include "cocos2d.h"
#pragma comment(lib, "libiconv.lib")
int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode);
#endif
(2) Tools.cpp
#include "Tools.h"
#include "iconv\iconv.h"
int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode)
{
iconv_t iconvH;
iconvH = iconv_open(fromCode, toCode);
if (iconvH == 0)
{
return -1;
}
const char* strChar = gbkStr.c_str();
const char** pin = &strChar;
size_t strLength = gbkStr.length();
char* outbuf = (char*) malloc(strLength*4);
char* pBuff = outbuf;
memset( outbuf, 0, strLength*4);
size_t outLength = strLength*4;
if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength))
{
iconv_close(iconvH);
return -1;
}
gbkStr = pBuff;
iconv_close(iconvH);
return 0;
}
(以下是我的纯原创)要注意的是,很多人icov.h这个文件的目录没有在指定目录下,这会导致报错,我们有两种解决方式。一种是像代码中写的一样,把iconv.h文件放入到指定的文件目录下,这样就可以直接使用了;第二种就是在你创建的这个项目中CTRL+F搜索iconv.h这个文件,把这个相对路径放置到include后边,举例:
#include "win32-specific\icon\include\iconv.h"
这个是我当时跑的时候的目录,读者可以根据自己的情况进行更改
好了,新建完这两个文件之后我们要在调用的界面上进行相应的修改了,注意要调用这几个头文件
#include "Tools.h"
#include "win32-specific\icon\include\iconv.h"
接下来就是我们自己想要的中文文字了,我举个栗子:
std::string a = "天鹅";
GBKToUTF8(a, "gbk", "utf-8");
Label* label = Label::create(a.c_str(), "Marker Felt", 100);
label->setPosition(ccp(450, 450));
this->addChild(label);
在这一部分就会出现天鹅的中文字样,不再是乱码