記得 以前寫 UTF-8 轉 BIG5 的痛苦指數很高....
因為 BIG5 的 編碼範圍 比 UTF-8 小.
所以 BIG5 常會因為編碼範圍的問題讓 ICONV 報錯...
我記得我當時的解法是 遇到 ICONV 出錯停下來時我就會 走 遞回 把 停在出錯的字元上的 字元轉成 UNICODE HTML &#XX;
再接下去把 UTF-8 下面要轉的重新接上來.
我也被 ICONV 折磨過~>_<"
本帖最后由 lc-soft 于 2012-08-25 11:36 编辑
回复 14# fiendcly
居然挖坟。。。
刚进帖发现LZ的代码好眼熟,原来我之前搞编码转换也复制粘贴了这代码,但现在已经改用其它方式实现了。
据说标准库自带编码转换函数。
我也遇到了楼主的问题,确实是长度类型问题,把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;
}
页:
1
[2]