iconv_open提示无效的参数是怎么回事
#include <iconv.h>
#include <stdio.h>
#include <locale.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
int main(int argc, char * argv[])
{
size_t ret;
char in_utf8[] = "姝e?ㄥ??瑁?";
char in_gb2312[] = "正在安装";
int src_len = strlen(in_utf8);
char szDest[64] = {'\0'};
int dest_len = 64;
memset(szDest,'\0',64);
iconv_t conv;
conv = iconv_open("UFT-8","GB2312");
if (conv == (iconv_t)-1)
{
perror("iconv_open:");
return -1;
}
ret = iconv(conv,(char**)&in_utf8,&src_len,&szDest,&dest_len);
if (ret == -1)
{
perror("iconv:");
return -1;
}
printf("%s\r\n",szDest);
iconv_close(conv);
return 0;
}
iconv_open 提示无效的参数是怎么回事? 我想把UTF8转成 GB2312
就是把LINUX下的默认编码转成WINDOWS可以显示的
conv = iconv_open("UFT-8","GB2312");
写反了吧
conv = iconv_open("GB2312","UFT-8");
iconv_t iconv_open (const char* tocode, const char* fromcode);
看看你的系统是否支持GB2312, 有的系统需要用GB18030
C/C++ code
#include <stdio.h>
#include <iconv.h>
int main(int argc, char *argv[])
{
char utf8[] = "\xe6\xad\xa3\xe5\x9c\xa8\xe5\xae\x89\xe8\xa3\x85";
char gb2312[100];
char *inbuf;
size_t inleft;
char *outbuf;
size_t outleft;
size_t inlen;
size_t outlen;
iconv_t cd;
cd = iconv_open("GB18030", "utf-8");
if ((iconv_t)-1 == cd) {
perror("icnov_open");
exit(1);
}
inbuf = utf8;
inleft = strlen(utf8) + 1;
outbuf = gb2312;
outleft = sizeof(gb2312);
iconv(cd, &inbuf, &inleft, &outbuf, &outleft);
outlen = sizeof(gb2312) - outleft;
printf("%s\n", gb2312);
return 0;
}