rain_fish 发表于 2010-11-30 18:00

问题原因找到,是由于size_t在32位和64位机上字节数不同所致!

rain_fish 发表于 2011-01-07 13:14

该问题顺利结贴了。

jack1219 发表于 2012-08-24 14:08

那LZ最后代码怎么改的啊?

fiendcly 发表于 2012-08-24 20:26

本帖最后由 fiendcly 于 2012-08-24 20:27 编辑

記得 以前寫 UTF-8 轉 BIG5 的痛苦指數很高....

因為 BIG5 的 編碼範圍 比 UTF-8 小.

所以 BIG5 常會因為編碼範圍的問題讓 ICONV 報錯...

我記得我當時的解法是 遇到 ICONV 出錯停下來時我就會 走 遞回 把 停在出錯的字元上的 字元轉成 UNICODE HTML &#XX;

再接下去把 UTF-8 下面要轉的重新接上來.

我也被 ICONV 折磨過~>_<"

lc-soft 发表于 2012-08-25 11:35

本帖最后由 lc-soft 于 2012-08-25 11:36 编辑

回复 14# fiendcly
居然挖坟。。。

刚进帖发现LZ的代码好眼熟,原来我之前搞编码转换也复制粘贴了这代码,但现在已经改用其它方式实现了。
据说标准库自带编码转换函数。

   

llol63 发表于 2017-04-18 08:34

我也遇到了楼主的问题,确实是长度类型问题,把int转成size_t传入iconv函数时导致长度不对,应该加个临时变量存储。
int CodeConvert(char *psFromCharset,char *psToCharset,char *psInputBuf,int iInputLen,char*psOutputBuf,int iOutputlen)
{
        iconv_t iConvHandle;   
        char **pInput = &psInputBuf;
        char **pOutput = &psOutputBuf;
        size_t inLen = iInputLen;
        size_t outLen = iOutputlen;
       
        iConvHandle = iconv_open(psToCharset,psFromCharset);
        if (iConvHandle == 0)
        {
                fprintf(stderr, "iconv_open Error[%s]!",strerror(errno));       
                return -1;
        }
          
        if (iconv(iConvHandle,pInput,&inLen,pOutput,&outLen) == -1)
        {
                fprintf(stderr, "iconv Error[%s]!",strerror(errno));
                iconv_close(iConvHandle);
                return -1;
        }
       
        iconv_close(iConvHandle);
        return 0;
}

潜水一厮 发表于 2017-06-07 11:18

页: 1 [2]
查看完整版本: 再请教一个问题,关于iconv的,返回失败,但转换成功了,不知道原因。