|
编译开发环境:WIN10+64位,VC++6.0
功能:VC++ 获取网页源代码,并且进行转码;如果网站是UTF8码,,则需要转为中文ansi。
读取网页源码,利用CInternetSession及CHttpFile读取数据,代码如下: - <div><font style="background-color: rgb(255, 255, 255);">CInternetSession mySession(NULL,0);
- CHttpFile* myHttpFile=NULL;
- m_SiteInfo="连接到站点"+m_SiteName+"\r\n";
- UpdateData(false);</font></div><div><font style="background-color: rgb(255, 255, 255);"> CString myData;
- myHttpFile=(CHttpFile*)mySession.OpenURL(m_SiteName);
- while(myHttpFile->ReadString(myData))
- {
- CString strTmp=Utf8ToAnsi(myData);
- m_SiteInfo=m_SiteInfo+"\r\n";
- m_SiteInfo+=strTmp;
- }
- myHttpFile->Close();
- mySession.Close();
- </font></div>
复制代码整体编译通过
由于网站为utf8编码,显示出来的中文为乱码,此处需要增加转换为ansi码,代码如下: - <div>//UTF8 to Ansi
- CString CMyWinInet_1Dlg::Utf8ToAnsi(const char* str)
- {
- //wchar_t * UTF8ToUnicode( const char* str )
- int textlen ;
- wchar_t * unicodestr=NULL;
- textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
- unicodestr = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
- if(NULL == unicodestr)
- {
- AfxMessageBox("内存不足\n错误代码:U2A01");
- return "0E";
- }
- memset(unicodestr,0,(textlen+1)*sizeof(wchar_t));
- MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)unicodestr,textlen );
- //char * UnicodeToANSI( const wchar_t* str )
- char* ansistr=NULL;
- textlen = WideCharToMultiByte( CP_ACP, 0, unicodestr, -1, NULL, 0, NULL, NULL );
- ansistr =(char *)malloc((textlen+1)*sizeof(char));
- if(NULL == ansistr)
- {
- AfxMessageBox("内存不足\n错误代码:U2A01");
- return "0E";
- }
- memset( ansistr, 0, sizeof(char) * ( textlen + 1 ) );
- WideCharToMultiByte( CP_ACP, 0, unicodestr, -1, ansistr, textlen, NULL, NULL );</div><div> free(unicodestr);
- unicodestr=NULL;</div><div> CString ansi=ansistr;</div><div> free(ansistr);
- ansistr=NULL;
-
- return ansi;
- }
- </div>
复制代码
添加转码后正常。
有兴趣的朋友可以下载完整工程参考一下。
附件:
|
|