我写的一个函数,想下载中文网页,但是下载下来的却是英文网页(用IE浏览器打开是中文的网页,但是用程序打开的却是英文的)!!!!大伙看看有何问题啊! 急啊!CString CLoadfile::gethtmlfile(CString htmlurl)
{
    CString szData,szAllData;
    CInternetSession *sess = new CInternetSession(NULL
   ,1
   ,INTERNET_OPEN_TYPE_PRECONFIG,
    NULL,
    NULL,
    INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
    sess->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000); 
sess->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000); 

//sess->SetOption(INTERNET_OPTION_CONNECT_RETRIES,2); //重新尝试2次
CHttpFile* pF=NULL;
    try
{
     
 pF=(CHttpFile*)sess->OpenURL(htmlurl);//打开文件
while(pF->ReadString(szData))
{//读取文件

szAllData+="\r\n";
szAllData+=szData;
}
pF->Close();
sess->Close();
}
     catch(...)//CInternetException* lpEx
 {
//  lpEx->ReportError();
//         lpEx->Delete();
 pF=NULL;
         delete sess;
 }
return szAllData;
}

解决方案 »

  1.   

    找个抓包工具对比一下浏览器和你的程序发出的包的请求头的区别,我估计是IDN设置的问题
      

  2.   

    把不一样的请求头添加到 OpenURL 的Header参数里试试
      

  3.   

    能够下载中文了,加了Header,但是显示的却是乱码了,如何解决啊????,下附下载中文的函数:
    CString CLoadfile::gethtmlfile(CString htmlurl)
    {
        CString szData,szAllData;
        CString pstrHeaders="";
        pstrHeaders="Accept-Language: zh-cn";////////////增加HEADER,下载中文网页
        CInternetSession *sess = new CInternetSession(NULL
       ,1
       ,INTERNET_OPEN_TYPE_DIRECT,
        NULL,
        NULL,
        INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);    sess->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000); 
    sess->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000); 
    //sess->SetOption(INTERNET_OPTION_CONNECT_RETRIES,2); //重新尝试2次
    CHttpFile* pF=NULL;


        try
    {
         
     pF=(CHttpFile*)sess->OpenURL(htmlurl,1,INTERNET_FLAG_TRANSFER_BINARY,pstrHeaders,pstrHeaders.GetLength());
    while(pF->ReadString(szData))
    {//读取文件

    szAllData+="\r\n";
    szAllData+=szData;
    }
    pF->Close();
    sess->Close();
    }
         catch(...)//CInternetException* lpEx
     {
    // lpEx->ReportError();
    //         lpEx->Delete();
     pF=NULL;
             delete sess;
     }
       
      AfxMessageBox(szAllData);

    return szAllData;}
      

  4.   

    看看中文是什么编码的,如果是utf8要用函数MultiByteToWideChar转换成unicode,或者再用WideCharToMultiByte转到ansi才能正常显示