阅 读 文 章

请教iconv函数的使用

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(chdonald) | 时间:2007-05-27 | 浏览:人次 ]


在SOLARIS下装了个libiconv库,编译以下程序为:
gcc -L/usr/local/iconv/lib -o conv conv.c -liconv
#include "/usr/local/iconv/include/iconv.h"
#include <strings.h>;
#define BUFLEN 200

char inbuf[BUFLEN];
char outbuf[BUFLEN];
char* pin = inbuf;
char* pout = outbuf;
int inlen;
int outlen = BUFLEN;


main(int argc, char **argv)
{
 iconv_t cd;
 ssize_t n;

 bzero(inbuf, BUFLEN);
 strncpy(inbuf, argv[1], BUFLEN);

 if((cd = iconv_open(argv[3], argv[2])) == (iconv_t)-1) //argv2 = from, argv3 =to
       return;
printf("convsing.........\n");
       inlen = strlen(inbuf);
printf("cd is %d, inlen = %d\n", cd, inlen);

if((n = iconv(cd, (const char **)&pin, &inlen, &pout, &outlen))  ==  (ssize_t)(-
1)){
       perror("iconv error\n");
       return;
}

 printf("Output: %s,n= %d,inlen=%d,outlen=%d\n", pout,n,inlen,outlen);
 iconv_close(cd);
}
运行:
./conv 测试 GB2312 UTF-8
convsing.........
cd is 134864, inlen = 4
Output: ,n= 0,inlen=0,outlen=194
既然iconv()也没出错,而且inlen已经-为0,说明已经作过转换了,为什么n=0,pout没有内容输出呢?



 bigluo 回复于:2003-06-08 12:16:58

我对solaris不是很熟悉,但是在linux中,iconv的正确转换需要glibc有相应的码表的支持。你可以检查一下你的solaris中的libc有gb2312->;utf8的码表吗?


 chdonald 回复于:2003-06-08 15:16:51

我查过了,支持的
iconv -l
而且用它提供的iconv命令也可以正确把一个GB2312文件的内容转换成UTF-8的


 bigluo 回复于:2003-06-08 15:57:19

我在三年前在RH linux 6.2下做过这些,现在真的记得不是特别清楚了,当时是根据台湾cle网站上的中文化文章做的,那儿对宽字节和iconv讲的很清楚,你可以去查阅一下。


 gadfly 回复于:2003-06-08 23:14:33

是这样子的。

iconv的man有点问题。iconv返回的实际上不是成功的数目。0只是说明成功。

最好先bzero outbuf, 另外,转化的不一定是可打印字符,你可以打印字符串的ascii码看看。


 libad 回复于:2003-06-10 17:03:24

我在LDAP中配置了中文,在solaris下面用C取出后是乱码。
gadfly说让我到这来请教各位。

1)我solaris下面没有装libiconv库。
应该去那里找这个库来安装?

2)听bigluo说:
iconv的正确转换需要glibc有相应的码表的支持。你可以检查一下你的solaris中的libc有gb2312->;utf8的码表吗? 

我运行:
      iconv -f UTF-8 -t GB2312 my.txt
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 使用 函数 请教 cd void 回复 inlen argv iconv if return

最新评论 共有1位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.