cocos2dx iconv编码转换可跨平台

#include "MyUtils.h"

#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "../external/win32-specific/icon/include/iconv.h"
#else
#include "../iconv/include/iconv.h"
#endif

CMyUtils* CMyUtils::m_Instatce = nullptr;

CMyUtils* CMyUtils::getInstance()
{
	if(m_Instatce == nullptr)
	{
		m_Instatce = new CMyUtils();
	}

	return m_Instatce;
}

void CMyUtils::release()
{
	if (m_Instatce != nullptr)
	{
		delete m_Instatce;
		m_Instatce = nullptr;
	}
}

int CMyUtils::Convert(char* from_charset,char* to_charset,const char* inbuf,size_t inlen,char* outbuf,size_t outlen)
{
	iconv_t cd = iconv_open(to_charset,from_charset);
	if(cd == 0)
		return -1;
	memset(outbuf,outlen);
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
	const char* pTemp = inbuf;
	const char** pIn = &pTemp;
	char** pOut = &outbuf;
	if(iconv(cd,pIn,&inlen,pOut,&outlen) == -1)
	{
		iconv_close(cd);
		return -1;
	}
#else
	if(iconv(cd,&inbuf,&outbuf,&outlen) == -1)
	{
		iconv_close(cd);
		return -1;
	}
#endif
	iconv_close(cd);

	return 0;
}


std::string CMyUtils::Gb2312ToUtf8(const char *inbuf)
{
	size_t inleng = strlen(inbuf);
	char* outbuf =  new char[inleng * 2 + 2];
	std::string strRet;
	if( Convert("gb2312","utf-8",inbuf,inleng,outbuf,inleng * 2 + 2) == 0 )
		strRet = outbuf;
	delete[] outbuf;
	return strRet;
}



#ifndef __UTIL_H__
#define __UTIL_H__
#include <string>

class CMyUtils
{
private:
	CMyUtils(){};
	~CMyUtils(){};

public:
	std::string Gb2312ToUtf8(const char *inbuf);

	static CMyUtils* getInstance();

	void release();


private:
	int Convert(char* from_charset,size_t outlen);

private:
	static CMyUtils* m_Instatce;


};

#endif

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...