例子从别人那转的2种方法
#include "iconv/iconv.h" //iconv.lib
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
int GBKToUTF8(std::string &gbkStr,const char* toCode,const char* formCode)
{
iconv_t iconvH;
iconvH = iconv_open(formCode,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;
}
/**
**在封装一层,直接传入一个string,转换后还回对应的编码给你
*/
const char* GBKToUTF(std::string &gbkStr)
{
GBKToUTF8(gbkStr,"gbk","utf-8");
return gbkStr.c_str();
}
#endif
描述:原理就是将字符串转为 UFT8, C++ 里面默认的字符编码是
GB2312 有图有真相 ,而coco2d-x 支持的编码是 UTF8, 所以放中文会有乱码。好在 C++ 支持标志 L 将字符串编译成 unicode(L"中国"),unicode 转UTF8就方便了,关于这些编码之间的关系,我觉得作为一个合格的程序员必须搞清楚。 libconv.lib
原文:http://my.youkuaiyun.com/q3745960/code/detail/30772
=========================================================================================================================
原文:http://www.eoeandroid.com/thread-250673-1-1.html
鉴于网上的一些解方案都不方便(也许我没找到)自己研究了一个方法, 其实原理就是将字符串转为 UFT8, C++ 里面默认的字符编码是 GB2312 有图有真相 ,而coco2d-x 支持的编码是 UTF8, 所以放中文会有乱码。好在 C++ 支持标志 L 将字符串编译成 unicode(L"中国"),unicode 转UTF8就方便了,关于这些编码之间的关系,我觉得作为一个合格的程序员必须搞清楚,自己百度去吧! 下面附上转换方法:(纯 C 做的,我喜欢 C)
封装方法:
使用方法 |