VC获取网页标题,解决乱码问题
来源:互联网 发布:java导出压缩包 编辑:程序博客网 时间:2024/05/20 04:51
//效果截图如下(文章后面附有VS2008本工程下载地址):
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
主要代码如下:
//取网页标题void CGetWebTitleDlg::OnBnClickedBtnGetTitle(){m_HtmlCode.SetWindowText(_T(""));//clearCInternetSession mySession(NULL,0);CHttpFile* htmlFile=NULL;CString strLine,url,strHtml;TCHAR sRecv[1024];UINT CodePage=65001;//CP_UTF8:65001 CP_ACP:0m_Url.GetWindowText(url);TRY {htmlFile=(CHttpFile*)mySession.OpenURL(url);//打开连接//获取网页编码while(htmlFile->ReadString(sRecv,1024)){//先用UTF8来进行转换,如果html页面编码是gbk或gb2312,转换后中文字符为//乱码,但英文字符显示正常,我们判断html页码编码,通过寻找英文就可以了int nBufferSize = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)sRecv, -1, NULL, 0);wchar_t *pBuffer = new wchar_t[nBufferSize+1];memset(pBuffer,0,(nBufferSize+1)*sizeof(wchar_t)); MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)sRecv, -1 , pBuffer, nBufferSize*sizeof(wchar_t)); strHtml=pBuffer;if (-1!=strHtml.Find(_T("charset=gbk"))){CodePage=0;delete pBuffer;break;}if (-1!=strHtml.Find(_T("charset=GBK")))//http://www.sohu.com{CodePage=0;delete pBuffer;break;}if (-1!=strHtml.Find(_T("charset=gb2312"))){CodePage=0;delete pBuffer;break;}if (-1!=strHtml.Find(_T("charset=GB2312"))){CodePage=0;delete pBuffer;break;}if (-1!=strHtml.Find(_T("charset=utf-8"))){CodePage=65001;delete pBuffer;break;}if (-1!=strHtml.Find(_T("charset=UTF-8"))){CodePage=65001;delete pBuffer;break;}delete pBuffer;}strHtml=_T("");//获取网页源码htmlFile=(CHttpFile*)mySession.OpenURL(url);//重新打开连接while(htmlFile->ReadString(sRecv,1024)){// 编码转换,可解决中文乱码问题//gb2312转为unicode,则用CP_ACP//gbk转为unicode,也用CP_ACP//utf-8转为unicode,则用CP_UTF8int nBufferSize = MultiByteToWideChar(CodePage, 0, (LPCSTR)sRecv, -1, NULL, 0);wchar_t *pBuffer = new wchar_t[nBufferSize+1];memset(pBuffer,0,(nBufferSize+1)*sizeof(wchar_t)); //gb2312转为unicode,则用CP_ACP//gbk转为unicode,也用CP_ACP//utf-8转为unicode,则用CP_UTF8MultiByteToWideChar(CodePage, 0, (LPCSTR)sRecv, -1 , pBuffer, nBufferSize*sizeof(wchar_t)); strHtml+=pBuffer;strHtml+="\r\n";delete pBuffer;}htmlFile->Close();mySession.Close() ;delete htmlFile;m_HtmlCode.SetWindowText(strHtml);//显示网页源码//获取网页标题 CString szTitle=strHtml.GetString();int nStart=szTitle.Find(_T("<title>"));int nEnd=szTitle.Find(_T("</title>"));szTitle=szTitle.Mid(nStart+7,nEnd-nStart-7);this->SetWindowText(_T("获取到的网页标题为【")+szTitle+_T("】 By︶风不冷丶"));}CATCH (CException, e){TCHAR err[1024];e->GetErrorMessage(err,1024);m_HtmlCode.SetWindowText(err);}END_CATCH}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本例子,VS2008工程下载地址:
http://download.csdn.net/detail/friendan/6288523
友情提醒:直接在VS2008中运行程序时,会获取不到网页标题,错误信息为:无法解析服务器的名称或地址
这个我现在也不知道是什么原因,知道的望告知 一二,不剩感激。不过你去生成程序的目录,直接运行程序,就不会有以上错误了。
在VS2008直接运行工程获取网页标题,错误截图如下:
-------------------------------------------------------------------------------------------------------------
您的十分满意是我追求的宗旨。
您的一点建议是我后续的动力。
- VC获取网页标题,解决乱码问题
- VC 获取网页数据时,如何解决乱码问题
- 解决网页乱码问题
- 使用WebBrowser获取网页源代码,解决中文乱码问题
- 使用WebBrowser获取网页源代码,解决中文乱码问题
- httpclient自动获取页面编码,解决网页抓取乱码问题
- C#获取网页内容,解决大部分乱码问题
- 解决中文乱码问题:获取任意网页代码
- 解决httpurlconnection获取网页数据部分中文乱码问题
- C#获取网页内容,解决大部分乱码问题
- 获取网页源代码并解决字符乱码的问题
- 解决php 网页乱码问题
- PHP解决网页乱码问题
- smtp.php 解决标题乱码的问题
- HttpWebResponse无法准确获取CharacterSet导致网页数据乱码问题的解决
- c# 获取网页源代码(可解决某些页面乱码的问题)
- 解决lynx浏览中文网页乱码问题
- mysql解决网页中乱码的问题
- Java压缩技术(四) GZIP——Java原生实现
- Java初学(一)——J2SE之基础语法
- 16,标准C
- 矩阵算法的基本题型
- pc端手机短信发送的介绍
- VC获取网页标题,解决乱码问题
- 九度-1163 素数
- 临时优化 可靠UDP程序
- poj2891 中国剩余定理
- UVA - 10271 Chopsticks
- LoadRunner 性能测试脚本
- 生产者-消费者生产模式 在医疗器械当中的使用
- [网页设计] 27款后台管理页面设计 DIV+CSS+JS
- linux ssh远程登录原理及中断原理