网页内容编码转换之iconv

7330阅读 4评论2014-09-30 scq2099yt
分类:Web开发

        在网页解析,比如:爬虫应用中,网页内容的编码转换是一件令人头痛的事情。
        比如:一般中文网页编码是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时对网页编码指定错了,比如:顺序出错。
          

上一篇:Hadoop初探之Stream
下一篇:解密搜索引擎技术之聚类与相似性word2vec

文章评论