iconv 字符集转换出错
本帖最后由 zw91683 于 2014-02-26 15:59:48 编辑
最近有个项目在用字符集转换,网上查了下iconv的用法,直接拿过来用,发现运行一直出错,代码如下:
#include
#include
#include
#include
#include
int code_convert(char* from_charset, char* to_charset, char* inbuf,
int inlen, char* outbuf, int outlen)
{
iconv_t cd;
char** pin = &inbuf;
char** pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if(cd == 0)
return -1;
memset(outbuf,0,outlen);
if(iconv(cd,(char**)(const char**)pin,(size_t *)(unsigned int *)&inlen,pout,(size_t *)(unsigned int*)&outlen)== -1 )
{
printf("errno =%d ;\n",errno);
return -1;
}
iconv_close(cd);
return 0;
}
char* u2g(char *inbuf)
{
int nOutLen = 255;
char* szOut = (char*)malloc(nOutLen);
if (-1 == code_convert("UTF-8","GBK",inbuf,strlen(inbuf),szOut,nOutLen))
{
free(szOut);
szOut = NULL;
}
return szOut;
}
char* g2u(char *inbuf)
{
int nOutLen = 255;
char* szOut = (char*)malloc(nOutLen);
if (-1 == code_convert("GBK","UTF-8",inbuf,strlen(inbuf),szOut,nOutLen))
{
printf("error no = %d;\n",errno);
free(szOut);
szOut = NULL;
}
return szOut;
}
int main(int argc, char **argv)
{
char src[128]={0};
sprintf(src,"123");
char* szOut = g2u(src);
if( szOut ) free(szOut);
return 1;
}
运行结果:
errno =84 ;
error no = 84;
一直报 EILSEQ(=84)错误,实在是不知道为什么了,请高手指教!
在线等!
------解决方案--------------------
引用:Quote: 引用:还有一个原因就是
if(iconv(cd,(char**)(const char**)pin,(size_t *)(unsigned int *)&inlen,pout,(size_t *)(unsigned int*)&outlen)== -1 )
{
printf("errno =%d ;\n",errno);
return -1;
}
你的系统是64位的,size_t与 unsigned int大小不一样,你把这个变量改一下看看。
拜服!!
确实是这个原因,谢谢!不用谢了,给分吧