日期:2014-05-16 浏览次数:20900 次
#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;
}