微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/cocos2dx/344898.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐