#include
#include
#include
#include
char *k_xml_iconv(const char *str, const char *to, const char *from)
{
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 = malloc(dstlen);
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 0;
}
if (inleft > 0) {
return 0;
}
dstbuf[dstlen - outleft] = 0;
return (dstbuf);
}
int main(void)
{
char gb2312[] = "oo?";
char *utf8;
utf8 = k_xml_iconv(gb2312, "UTF-8", "GB18030");
printf("%sn", utf8);
return 0;
}
[cqsm@cqsm kobus]$ cat a.c
#include
#include
#include
#include
char *k_xml_iconv(const char *str, const char *to, const char *from)
{
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 = malloc(dstlen);
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 0;
}
if (inleft > 0) {
return 0;
}
dstbuf[dstlen - outleft] = 0;
return (dstbuf);
}
int main(void)
{
char gb2312[] = "汉字";
char *utf8;
utf8 = k_xml_iconv(gb2312, "UTF-8", "GB18030");
printf("%sn", utf8);
return 0;