免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10150 | 回复: 14
打印 上一主题 下一主题

[函数] 请教iconv函数的使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-08 11:53 |只看该作者 |倒序浏览
在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没有内容输出呢?

论坛徽章:
0
2 [报告]
发表于 2003-06-08 12:16 |只看该作者

请教iconv函数的使用

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

论坛徽章:
0
3 [报告]
发表于 2003-06-08 15:16 |只看该作者

请教iconv函数的使用

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

论坛徽章:
0
4 [报告]
发表于 2003-06-08 15:57 |只看该作者

请教iconv函数的使用

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-06-08 23:14 |只看该作者

请教iconv函数的使用

是这样子的。

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

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

论坛徽章:
0
6 [报告]
发表于 2003-06-10 17:03 |只看该作者

请教iconv函数的使用

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

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

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

我运行:
      iconv -f UTF-8 -t GB2312 my.txt
提示:
       不支持到 GB2312 的 UTF-8

好象是没有相应的码表,我应该怎么办,去那里去安装呀?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-06-10 18:04 |只看该作者

请教iconv函数的使用

1.需要装glibc-devel软件包

2.我的solaris装了这几个包
ALE         SUNWciu8             Simplified Chinese (EUC) iconv modules for UTF-8
ALE         SUNWciu8x            Simplified Chinese (EUC) iconv modules for UTF-8 (64-bit)
ALE         SUNWhiu8             Traditional Chinese iconv modules for UTF-8
ALE         SUNWhiu8x            Traditional Chinese (EUC) iconv modules for UTF-8 (64-bit)

另外这样是可以的
iconv -f UTF-8 -t gb2312 my.txt

论坛徽章:
0
8 [报告]
发表于 2003-06-10 18:11 |只看该作者

请教iconv函数的使用

斑竹:

glibc-devel软件包 去那里下载呀?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-06-10 18:38 |只看该作者

请教iconv函数的使用

哦,在solaris上有个单独的libiconv

sunfreeware.com

论坛徽章:
0
10 [报告]
发表于 2003-06-10 20:06 |只看该作者

请教iconv函数的使用

没错,我就是下了这个包的。可是我的问题还没搞定,请大家帮忙!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP