user-0 提问: iconv转码问题

回复:
user: user-0
content: 引用 15 楼 todo9351 的回复:楼主是用libiconv 吧。  就是要注意一下，转换过程中会修改原来的空间的内容。  还有就是原来字符的编码是不是 指定的，如 UTF-8  转成 GBK ，如果原来的字符是GBK的，那转一下立马就出错了。  我也是弄好久才发现的。 我是拿到网络的报文，存在字符串中，能肯定原来的编码格式就是Unicode，你觉得，哪里还会有问题呢？大神

user: user-1
content: 楼主是用libiconv 吧。  就是要注意一下，转换过程中会修改原来的空间的内容。  还有就是原来字符的编码是不是 指定的，如 UTF-8  转成 GBK ，如果原来的字符是GBK的，那转一下立马就出错了。  我也是弄好久才发现的。

user: user-0
content: ssize_t convert(const char *tocode, const char *fromcode, char *inbufp, size_t inbytesleft, char *outbufp, size_t outbytesleft) {               iconv_t ic;         size_t outbytes = outbytesleft;         size_t intbytes = inbytesleft;         int ret;         char *in, *out;          in = (char *)inbufp;         out = (char *)outbufp;         ic = iconv_open (tocode, fromcode);         if (ic == (iconv_t ) - 1)         {                 printf ("iconv_open failed: from: %s, to: %s: %s\n",                            fromcode, tocode, strerror (errno));                 return -1;         }         while (inbytesleft > 0)         {                 printf("conv before\n");                 printf("intbytes : %d\n", intbytes);                 printf("outbytes : %d\n", outbytes);                 ret = iconv (ic, (char **)&in, &intbytes, (char **)&out, &outbytes);                 if (ret == -1)                 {                         printf ("iconv failed: from: %s, to: %s: %s\n",                                 fromcode, tocode, strerror (errno));                                            return -1;                 }                 printf("conv after\n");         }         ret = iconv_close (ic);         if (ret == -1)         {                 printf ("iconv_close failed: from: %s, to: %s: %s\n",                           fromcode, tocode, strerror (errno));                 return -1;         }         return outbytesleft-outbytes; } 有问题么?ionv还是直接退出了，真没法了。。

user: user-2
content: 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\cvt\*.*   自己写个转码函数。不用iconv这个劳什子了！

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:[quote=引用 10 楼 whenyumen 的回复:] [quote=引用 9 楼 zhao4zhong1 的回复:] 引用 5 楼 zhao4zhong1 的回复: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令 关键环境，没有gdb，不允许安装，但是可以把core文件调出来，您看代码有问题么[/quote] core文件拷贝到其它机器上，照样可以使用 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 [/quote] 没用的，我看了，我保证是iconv函数那儿有问题，但是有啥问题呢？。。

user: user-2
content: 引用 10 楼 whenyumen 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] 引用 5 楼 zhao4zhong1 的回复: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令 关键环境，没有gdb，不允许安装，但是可以把core文件调出来，您看代码有问题么[/quote] core文件拷贝到其它机器上，照样可以使用 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:引用 5 楼 zhao4zhong1 的回复: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令 关键环境，没有gdb，不允许安装，但是可以把core文件调出来，您看代码有问题么

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-0
content: 引用 4 楼 user-3 的回复:gdb 了吗？程序怎么能直接退出呢。 core文件，gbd具体如下，段错误？ warning: core file may not match specified executable file. Failed to read a valid object file image from memory. Core was generated by `./JDdecodetds11'. Program terminated with signal 11, Segmentation fault. [New process 8113] [New process 8111] #0  0x305b5ba3 in ?? ()

user: user-0
content: 引用 4 楼 user-3 的回复:gdb 了吗？程序怎么能直接退出呢。 没有产生core文件

user: user-0
content: 引用 3 楼 whenyumen 的回复:仍没找到任何问题啊。。 是啊，程序从ionv中直接退出了

user: user-3
content: gdb 了吗？程序怎么能直接退出呢。

user: user-0
content: 仍没找到任何问题啊。。

user: user-0
content: 没人用过么？紧急求救啊

user: user-0
content: 不能沉啊，亲们！！

user: user-2
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令