免费注册 查看新帖 |

Chinaunix

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

libiconv应用例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-26 00:02 |只看该作者 |倒序浏览

                                               
iconv的功能可算强大,可以对文本进行编码间的转换,它支持世界上很多的语言,当然我们主要用它来处理中文各种编码之间的转换,libiconv是一个开源的开发包,使用它可以非常方便的开发出适合自己用的编码转换工具。在这里
http://gnuwin32.sourceforge.net/packages/libiconv.htm
可以下载到libiconv的文档和开发包。
Libiconv的使用比较简单,只有3个函数
1)iconv_t iconv_open (const char* tocode, const char* fromcode);
2)size_t iconv (iconv_t cd, const char* * inbuf , size_t * inbytesleft, char* * outbuf , size_t * outbytesleft);
      inbytesleft:输入(inbuf)的字符串长度;
      outbytesleft:这边变量必须带入一个长度,是outbuf所指向的缓冲区长度(如1000),输出的是剩余没用到的缓冲区长度(如200,说明转换结果是800个字节)
      inbuf, outbuf:返回时指针都后移了,需要注意。
3)int iconv_close (iconv_t cd);
程序片段如下:
               
               
               
               
               
               
                iconv_t   cd;
size_t   inleft;
size_t   outleft = BUF_LEN;
char   from_encoding[20], to_encoding[20];
char   inbuf[BUF_LEN];
char   *pin = inbuf;
unsigned char   outbuf[BUF_LEN];
unsigned char   *pout = outbuf;
int    outlen;
cd = iconv_open(to_encoding, from_encoding);
memset(inbuf, 0, sizeof(inbuf));
memset(outbuf, 0, sizeof(outbuf));
strcpy(inbuf, "来看看记得分是");
inleft = strlen(inbuf);
if((rv = iconv(cd, (const char **)&pin, &inleft, (char **)&pout, &outleft)) == -1)
{
    iconv_close(cd);
    return -1;
}
outlen = BUF_LEN - outleft;
iconv_close(cd);
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/97267/showart_1944681.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP