1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include "iconv.h"
int code_convert(char *fromcode, char *fromcode, char *inbuf, size_t inlen, char *outbuf, size_t outlen) { iconv_t cd; char **pin = &inbuf; char **pout = &outbuf; memset(outbuf, '\0', outlen); cd = iconv_open(fromcode, fromcode); if (cd == 0) { perror("open iconv failed: "); return -1; }
if (iconv(cd, pin, &inlen, pout, &outlen) == -1) { perror("iconv failed: "); return -1; }
iconv_close(cd); *pout = '\0'; return 0; } int utf2gbk(char *inbuf, size_t inlen, char *outbuf, size_t outlen) { return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen); } int gbk2utf(char *inbuf, size_t inlen, char *outbuf, size_t outlen) { return code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, outlen); }
|