linux下iconv()问题

netxuning 2007-06-12 09:53:28
用iconv函数族写个程序进行编码转换,繁体-简体
可是总是说:Invalid or incomplete multibyte or wide character
可是明明是繁体啊:

#include <stdio.h>
#include <string.h>
#include <iconv.h>

int
main(int argc, char** argv)
{
iconv_t cd;
char* in = strdup("過");
char* out = calloc( sizeof(char), 16);
int inlen, outlen;

cd = iconv_open("GB2312", "BIG5");
if((iconv_t)-1 == cd)
{
perror("iconv_open");
return -1;
}
printf("要轉換的字符串是:%s\n", in);
if(-1 == iconv(cd, &in, &inlen, &out, &outlen))
{
perror("iconv");
free(in);
free(out);
iconv_close(cd);
return -1;
}

printf("inlen:%d --- outlen:%d\n%s@@@", inlen, outlen, out);

free(in);
free(out);
iconv_close(cd);
}
...全文
1206 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dai_weitao 2007-06-12
  • 打赏
  • 举报
回复
楼上说的有道理.
netxuning 2007-06-12
  • 打赏
  • 举报
回复
谢谢楼上的
我现在弄了个big5的字符串,虽然没有 Invalid or incomplete multibyte or wide character
但是确不出结果,输出的out内容为空.

#include <stdio.h>
#include <string.h>
#include <iconv.h>

int
main(int argc, char** argv)
{
iconv_t cd;
char* in = strdup("璊繟儡");
int inlen = 16, outlen = 32;
char* out = (char*)calloc( sizeof(char), outlen);

cd = iconv_open("GB2312", "BIG5");
if((iconv_t)-1 == cd)
{
perror("iconv_open");
return -1;
}
printf("要轉換的字符串是:%s\n", in);
if(-1 == iconv(cd, &in, &inlen, &out, &outlen))
{
perror("iconv");
// free(in);
free(out);
iconv_close(cd);
return -1;
}

printf("inlen:%d --- outlen:%d\n%s@@@\n", inlen, outlen, out);

free(in);
//free(out);
iconv_close(cd);
}
www_adintr_com 2007-06-12
  • 打赏
  • 举报
回复
简体编码 gb2312 里也有繁体字啊,你的这些繁体还是 gb2312 编码的,不是 big5. 如果是 big5 在这里看起来应该是乱码才对。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧