在写cocos的时候需要解析一个文件,但是文件是GBK编码方式,而cocos默认是使用UTF-8所以需要转码,这是在网上找到的代码,但是原本的不能用,这我修改过的。
系统环境:MacMini
编译器:Xcode
游戏引擎:cocos2d-x
头文件:#include <iconv.h>
int Rf4FileDecode::code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0)
return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen) == -1)
return -1;
iconv_close(cd);
return 0;
}
int Rf4FileDecode::u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert((char*)"utf-8",(char*)"gb2312",inbuf,inlen,outbuf,outlen);
}
int Rf4FileDecode::g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert((char*)"gb2312",(char*)"utf-8",inbuf,(int)inlen,outbuf,(int)outlen);
}
调用的时候 原编码字符串最好跟新编码字符串区分开为两个而不是转码后直接保存到原来的缓冲区。
调用代码:
char b[1024];
this->g2u(buff,1024,b,1024);