iconv 判断字符编码_iconv 字符集转换报错

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大小不一样,你把这个变量改一下看看。

 拜服!!

确实是这个原因,谢谢!不用谢了,给分吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值