Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760632
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: Web开发

2014-09-30 18:04:08

        在网页解析,比如:爬虫应用中,网页内容的编码转换是一件令人头痛的事情。
        比如:一般中文网页编码是gbk,用libcurl下载网页后,用C/C++代码解析网页内容时,看到的会是乱码,因为C/C++默认的编码是utf-8。
        所幸的是iconv可以实现各种编码之间的互转,为我们完美的解决了此类问题。
一、安装
        使用之前需要确认系统是否已经安装iconv,如果没有安装,点击下载源码。
        解压后,进入源码目录,开始编译安装:
        #./configure --prefix=/usr/local
        #make
        #make install
        #ldconfig
        安装完后就可以开始使用了,关于iconv的更多详细信息可以参见。

二、使用
        iconv的使用很简单,一共涉及3个函数,具体例子如下:
        
#vi main.cpp
        #include
        #include
        #include
        int main(int argc, char *argv[])
        {
            //获得句柄,这里是从gbk转换为utf-8
            iconv_t cd = iconv_open("utf-8","gbk");
            if ((iconv_t)-1 == cd)
            {
                printf("iconv_open failed\n");
                return -1;
            }
            char *src = "我是中国人"; //假设是gbk编码  
            char dst[10*1024*1024] = {0};//有时候出错,是因为buf太小,所以buf要足够大,比如:utf-8=1.5*gbk
            size_t src_len = strlen(src);
            size_t dst_len = sizeof(dst);
            //编码转换
            int ret = iconv(cd, &src, &src_len, &dst, &dst_len);
            if ((size_t)-1 == ret || dst_len <= 0)
            {
                printf("iconv failed:  %s\n" , strerror(errno).c_str());
                return -1;
            }
            iconv_close(cd);//关闭句柄
            printf("gbk(%s)-->utf-8(%s)\n", src, dst);
            return 0;
        }
        #g++ -o main main.cpp -liconv
        #./main
        如果成功了,恭喜你,如果出现如下错误:
        Invalid or incomplete multibyte or wide character iconv
        则说明在调用函数iconv_open时对网页编码指定错了,比如:顺序出错。
          

阅读(7264) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

scq2099yt2014-10-08 10:33:31

cxsvip:如果不知道源编码格式,有办法转换成指定的格式不?例如不知道源网页是什么编码,想统一转成UTF8的,可能吗?

会报错

回复 | 举报

scq2099yt2014-10-08 10:33:31

cxsvip:如果不知道源编码格式,有办法转换成指定的格式不?例如不知道源网页是什么编码,想统一转成UTF8的,可能吗?

会报错

回复 | 举报

cxsvip2014-10-08 09:01:13

如果不知道源编码格式,有办法转换成指定的格式不?例如不知道源网页是什么编码,想统一转成UTF8的,可能吗?

scq2099yt2014-09-30 18:04:35

文明上网,理性发言...