我可以: 邀请好友来看>>
ZOL星空(中国) > 技术星空(中国) > C/C++星空(中国) > 使用iconv函数修改字符集出错,大家帮看看
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

使用iconv函数修改字符集出错,大家帮看看

169浏览 / 6回复

333
精华
333
帖子

等  级:Lv.1
经  验:0
  • Z金豆:

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:
  • 注  册:
  • 登  录:
发表于 2008-12-23 09:28:24
电梯直达 确定
楼主
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
        iconv_t cd;
        int rc;
        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,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1)
                                return -1;
        iconv_close(cd);
        return 0;}int main()
{
        char out[400];
        char str_str[400];
        unsigned short test[400];
        wchar_t wcode[400];
        
        unsigned int inlen;
        unsigned int outlen=200;        int result;
        string str = "汉";
  memset(str_str,0,sizeof(str_str));
  memcpy(str_str,str.c_str(),strlen(str.c_str()));
  
        result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);  printf("result = %dn",result);
  
}
我照着网上的范例写了这个程序,想把GB18030的中文字符集转换成UTF-8的字符集,但是一直都不成功,每次执行的result结果都是-1,大家帮忙看看是什么原因

6427252it

6427252it


精华

帖子

等  级:Lv.5
经  验:3690
发表于 2008-12-23 09:28:24 1楼
iconv_open出错返回(iconv_t)(-1)


精华

帖子

等  级:Lv.1
经  验:0
发表于 2008-12-23 09:28:24 2楼
我是这里出错返回:if (iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1)
        return -1;

8wy9596

8wy9596


精华

帖子

等  级:Lv.8
经  验:32545
发表于 2008-12-23 09:28:24 3楼
"result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);"“妹子执行的result结果都是-1”看看你给inlen 传的值大妹子
你是每次还是妹子ps:strlen(str.c_str())这个地方的用法也有问题的吧


精华

帖子

等  级:Lv.1
经  验:0
发表于 2008-12-23 09:28:24 4楼
ps:strlen(str.c_str())这个地方的用法也有问题的吧
我一直都这么用啊,得到的长度也没错。虽然是在"result=code_convert("UTF8","GB18030",str_str,inlen,out,OUTLEN);"调用的字符集转换函数,但是执行到if (iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen)==-1) 这里时才会返回 -1

lv999yit

lv999yit


精华

帖子

等  级:Lv.3
经  验:1036
发表于 2008-12-23 09:28:24 5楼
你的inlen没有初始化值,0或者你需要转换的buf长度

cq00000

cq00000


精华

帖子

等  级:Lv.1
经  验:0
发表于 2008-12-23 09:28:24 6楼

那是你走点小运而已
高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表