方法就里利用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有用!!