日期:2014-05-16 浏览次数:20894 次
#include <stdio.h>
#include <string.h>
#include <iconv.h>
char *ks_iconv(const char *str, char *buf, const char *from, const char *to)
{
iconv_t cd;
char *inbuf;
char *outbuf;
char *dstbuf;
size_t dstlen;
size_t size;
size_t inleft;
size_t outleft;
dstlen = strlen(str) * 3;
dstbuf = buf;
cd = iconv_open(to, from);
if ((iconv_t)-1 == cd) {
return 0;
}
inbuf = (char *)str;
outbuf = dstbuf;
inleft = strlen(str);
outleft = dstlen;
size = iconv(cd, &inbuf, &inleft, &outbuf, &outleft);
iconv_close(cd);
if ((size_t)-1 == size) {
return NULL;
}
if (inleft > 0) {
return NULL;
}
dstbuf[dstlen - outleft] = 0;
return (dstbuf);
}
int main(int argc, char *argv[])
{
char gb[] = "中国";
char utf[32];
ks_iconv(gb, utf, "GB2312", "UTF-8");
printf("utf=[%s]\n", utf);
return 0;
}