现在的位置: 首页 > 综合 > 正文

mfc 读取utf8网页不乱码实例

2019年06月01日 ⁄ 综合 ⁄ 共 1389字 ⁄ 字号 评论关闭

最近为了读取网页源码,找了不少资料。因为是初学,特别吃力。由于,需要和网站交互,有些特殊字符。所以,使用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;
}

抱歉!评论已关闭.