您的位置:首页 > 运维架构 > Linux

utf-8和gbk之间相互转换

2011-03-14 14:09 344 查看
方法就里利用linux提供的iconv机制。

 

经过项目测试是正确的:

 

 

#include <iconv.h>
//Added for convert between utf-8 to gbk 20110314 by XYang
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0)
{
PRINT("iconv_open error!");
return -1;
}

memset(outbuf,0,outlen);

if (iconv(cd,pin,&inlen,pout,&outlen) == -1)
{
PRINT("iconv error!");
return -1;
}

iconv_close(cd);

return 0;
}

int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//Currently, not used
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}


 

 这里,请注意在调用这两个函数时,outlen是必须先前指定的,必须有大小,否则会出错。

like:

int contents_inlen=0;
int contents_outlen=EMAY_MSG_MAX_LEN;
char convert_res[EMAY_MSG_MAX_LEN];
contents_inlen = strlen(contents);

PRINT("contents is %s len is %d",contents,contents_inlen);

if( 0 != u2g(contents,contents_inlen,convert_res,contents_outlen) )
{
PRINT("u2g of contents error!!!");
return -1;
}
 

希望对用到的DX有用!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 测试