最近为了读取网页源码,找了不少资料。因为是初学,特别吃力。由于,需要和网站交互,有些特殊字符。所以,使用unicode编码会比较方便。所以,乱码很严重。现在总算是都解决了。。。
实例下载地址:http://download.csdn.net/detail/open520yin/4832551
CInternetSession session(_T("HttpClient")); TCHAR *url= _T("http://www.baidu.com"); CHttpFile* pfile = (CHttpFile *)session.OpenURL(url); DWORD dwStatusCode; pfile -> QueryInfoStatusCode(dwStatusCode); if(dwStatusCode == HTTP_STATUS_OK) { CString content; CString data; while (pfile -> ReadString(data)) { content += data ; } char *pch; pch = new char[content.GetLength() * sizeof(TCHAR)+ 1]; memcpy(pch, content,content.GetLength() * sizeof(TCHAR)); content = UTF8ToUnicode(pch);//转换编码,不然就乱码了 AfxMessageBox(content); } pfile -> Close(); delete pfile; session.Close();
这个是读取,网页的主要部分,使用CInternetSession里面的东西,需要加载一个
#include <afxinet.h>
UTF8ToUnicode 定义如下
CString CCInternetSession_htmlDlg::UTF8ToUnicode(char* UTF8) { DWORD dwUnicodeLen; //转换后Unicode的长度 TCHAR *pwText; //保存Unicode的指针 CString strUnicode; //返回值 //获得转换后的长度,并分配内存 dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0); pwText = new TCHAR[dwUnicodeLen]; if (!pwText) { return strUnicode; } //转为Unicode MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen); //转为CString strUnicode.Format(_T("%s"),pwText); //清除内存 delete []pwText; //返回转换好的Unicode字串 return strUnicode; }