注意!!!
在写代码之前要把修改一下字符集,改为多字节字符集,如果不改就会发生乱码。
就像这样
修改方法:
主界面:
写代码之前要引入这个头文件
//确定按钮
void CdemoDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//定义一个字符串 用于保存网站地址
CString str;
//从控件上获取网站地址并保存到str
GetDlgItemText(IDC_EDIT1,str);
//创建一个会话
CInternetSession session;
//用于保存爬取后的网站内容
CHttpFile * file = NULL;
//异常处理
try
{
//打开网站并转换格式
file = (CHttpFile *)session.OpenURL(str);
}
catch(CInternetException * pException)
{
//发生错误的情况
pException->ReportError();
pException->Delete();
return;
}
CString tmp;
CString content;
//readstring是一行一行的读取
while(file->ReadString(tmp))
{
//吧每一行读取到的内容存放到content中
//content += tmp;
//转换字符集 我爬取的网站格式是utf-8格式 在读取到的每一样后面加回车
content += Convert(tmp,CP_UTF8,CP_ACP) + _T("\r\n");
}
//释放内容
file->Close();
delete file;
session.Close();
//写到控件中
SetDlgItemText(IDC_EDIT2,content);
}
转换字符集函数
Convert声明
//函数声明
CString Convert(CString str,int sourceCodepage, int targetCodepage);
CString Convert(CString str,int sourceCodepage, int targetCodepage)
{
int len = str.GetLength();
int unicodeLen = MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);
wchar_t *pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);
BYTE *pTargetData = NULL ;
int targetLen = WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char*)pTargetData,0,NULL,NULL);
pTargetData = new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char*)pTargetData,targetLen,NULL,NULL);
CString rt;
rt.Format("%s",pTargetData);
delete []pUnicode;
delete []pTargetData;
return rt ;
}
爬取成功