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