utf-8和gbk之间相互转换
2011-03-14 14:09
344 查看
方法就里利用linux提供的iconv机制。
经过项目测试是正确的:
这里,请注意在调用这两个函数时,outlen是必须先前指定的,必须有大小,否则会出错。
like:
希望对用到的DX有用!!
经过项目测试是正确的:
#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有用!!
相关文章推荐
- 简要介绍一下UTF-8编码和GBK编码------并利用linux中的iconv命令来实现UTF-8和GBK之间的相互转换
- GBK与UTF-8 之间的相互转换
- dedecms网站GBK与UTF-8相互之间怎么转换
- 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
- Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- ANSI,UNICODE, UTF-8 字符串之间的相互转换
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- ANSI,UNICODE, UTF-8 字符串之间的相互转换
- UTF-8,UNICODE,Gb2312他们3个之间的相互转换.
- GBK与UTF-8之间的转换
- 字符编码之间的相互转换 UTF8与GBK
- unicode和utf-8,gbk之间的转换与关系
- 黑马程序员-Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- UTF8与GBK字符编码之间的相互转换
- Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- 有关编码(GBK、utf-8、iso8859-1、)相互转换问题
- UTF-8,UNICODE,ANSII,GBK,GB2312相互转换