下面是代码
CString strSentence, strWriteName;
CString strFileName=_T("http://www.google.com");     CInternetSession sess; 
    CHttpFile* fileGet; 
    try 
    { 
        fileGet=(CHttpFile*)sess.OpenURL(strFileName); 
    } 
    catch(CException* e) 
    { 
        fileGet = 0; 
        throw; 
    }        if(fileGet) 
    { 
        DWORD dwStatus; 
DWORD dwStatusCode;
        DWORD dwBuffLen = sizeof(dwStatus); 
BOOL bSuccess = fileGet->QueryInfoStatusCode(dwStatus); if(dwStatus==200)//dwStatusCode)
        { 
//CStdioFile fil;
//fil.Open(_T("1.txt"),CFile::modeWrite|CFile::modeCreate);
                while(fileGet->ReadString(strSentence)) 
{ //strSentence.Format(_T("%d"),55555555);
//fil.WriteString(strSentence+_T("\n"));
//MessageBox(strSentence,0,0);
strWriteName.Append(strSentence);
//strWriteName.Append(_T("\n"));
                } 
fil.Close();
MessageBox(strWriteName,0,0);
        } 
        else 
        { 
            strSentence.Format(_T("打开网页文件出错,错误码:%d"), dwStatus); 
            AfxMessageBox(strSentence); 
        } 
        fileGet->Close(); 
        delete fileGet; 
    } 
    else 
        AfxMessageBox(_T("不能找到网页文件!"));     sess.Close();
工程支持UNICODE这样取出来的东西是乱码~
试了好几种编码的网页 utf-8 gb2312 全英文网站
都是乱码~~~
高手请帮助~sorry~
我目前没有积分~~~

解决方案 »

  1.   


    int  len=str.GetLength();   
        int  unicodeLen=MultiByteToWideChar(CP_UTF8,0,str,-1,NULL,0);   
        wchar_t * pUnicode;   
        pUnicode=new  wchar_t[unicodeLen+1];   
        memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));   
        MultiByteToWideChar(CP_UTF8,0,str,-1,(LPWSTR)pUnicode,unicodeLen);   
        BYTE  *  pTargetData=NULL;   
        int  targetLen=WideCharToMultiByte(936,0,(LPWSTR)pUnicode,-1,(char  *)pTargetData,0,NULL,NULL);   
        pTargetData=new  BYTE[targetLen+1];   
        memset(pTargetData,0,targetLen+1);   
        WideCharToMultiByte(936,0,(LPWSTR)pUnicode,-1,(char  *)pTargetData,targetLen,NULL,NULL);   
        CString  rt;   
        rt.Format("%s",pTargetData);   
        delete  pUnicode;   
        delete  pTargetData;
    return rt;
      

  2.   

    谢谢楼上的,我把代码改成这样了,照你写的 
    void CtestDlg::OnBnClickedButton1()
    {

    CString str, strWriteName;
    CString strFileName=_T("http://www.google.com");     CInternetSession sess; 
        CHttpFile* fileGet; 
        try 
        { 
            fileGet=(CHttpFile*)sess.OpenURL(strFileName); 
        } 
        catch(CException* e) 
        { 
            fileGet = 0; 
            throw; 
        }        if(fileGet) 
        { 
            DWORD dwStatus; 
    DWORD dwStatusCode;
            DWORD dwBuffLen = sizeof(dwStatus); 
    BOOL bSuccess = fileGet->QueryInfoStatusCode(dwStatus); if(dwStatus==200)//dwStatusCode)

    /*CStdioFile fil;
    fil.Open(_T("1.txt"),CFile::modeWrite|CFile::modeCreate);*/
    while(fileGet->ReadString(str)) 
    { //strSentence.Format(_T("%d"),55555555);
    //fil.WriteString(strSentence+_T("\n"));
    //MessageBox(strSentence,0,0);
    //strWriteName.Append(_T("\n"));
    int  len=str.GetLength();   
    int  unicodeLen=MultiByteToWideChar(CP_UTF8,0,(LPCSTR)CString_To_LPBYTE(str),-1,NULL,0);   
    wchar_t * pUnicode;   
    pUnicode=new  wchar_t[unicodeLen+1];   
    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));   
    MultiByteToWideChar(CP_UTF8,0,(LPCSTR)CString_To_LPBYTE(str),-1,pUnicode,unicodeLen);   
    BYTE  *  pTargetData=NULL;   
    int  targetLen=WideCharToMultiByte(936,0,(LPWSTR)pUnicode,-1,(char  *)pTargetData,0,NULL,NULL);   
    pTargetData=new  BYTE[targetLen+1];   
    memset(pTargetData,0,targetLen+1);   
    WideCharToMultiByte(936,0,(LPWSTR)pUnicode,-1,(char  *)pTargetData,targetLen,NULL,NULL);   
    CString  rt;   
    rt.Format(_T("%s"),pTargetData);   
    delete  pUnicode;   
    delete  pTargetData;
    //return rt;
    strWriteName.Append(rt);
                    } 
    //fil.Close();
    MessageBox(strWriteName,0,0);
            } 
            else 
            { 
                str.Format(_T("打开网页文件出错,错误码:%d"), dwStatus); 
                AfxMessageBox(str); 
            } 
            fileGet->Close(); 
            delete fileGet; 
        } 
        else 
            AfxMessageBox(_T("不能找到网页文件!"));     sess.Close();
    }
    LPBYTE CtestDlg::CString_To_LPBYTE(CString str)
    {
    LPBYTE lpb=new BYTE[str.GetLength()+1];
    for(int i=0;i<str.GetLength();i++)
    lpb[i]=str[i];
    lpb[str.GetLength()]=0;
    return lpb;
    }
    还是乱码,郁闷~~~
      

  3.   

    参考 http://topic.csdn.net/u/20090624/16/29c0a5f1-e6bc-4af0-b1b5-fde200548af8.html
      

  4.   

    谢谢楼上的,我自己去网上找了下,读取的时候用byte的方式,这样能解决乱码的问题~
    但是网页读取不完全,还是谢谢你~
      

  5.   

    代码如下,读取的时候,读取不完全,郁闷中 CInternetSession session; 
    CInternetFile* file = NULL; 
    try 

    // 试着连接到指定URL 
    //session.SetOption();
    file = (CInternetFile*) session.OpenURL(_T("http://www.people.com.cn/rss/politics.xml")); 

    catch (CInternetException* m_pException) 

    // 如果有错误的话,置文件为空 
    file = NULL; 
    throw;//return FALSE; 
    m_pException->Delete(); 
    }  // 用dataStore来保存读取的网页文件 
    CStdioFile dataStore;  if (file) 
    {  BOOL bIsOk = dataStore.Open(_T("1.xml"), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite | CFile::typeText); 
    if (bIsOk) 
    { // return FALSE; 
    LPBYTE lpb=new BYTE[1024];
    while(file->Read(lpb,1024)>0)
    {
    // 读写网页文件,直到为空 
    //while (file->ReadString(somecode) != NULL) //如果采用LPTSTR类型,读取最大个数nMax置0,使它遇空字符时结束 
    //{ 
    // dataStore.WriteString(somecode); 
    // dataStore.WriteString(_T("\n")); //如果somecode采用LPTSTR类型,可不用此句 
    //} 
    dataStore.Write(lpb,255);
    delete lpb;
    LPBYTE lpb=new BYTE[1024];
    }
    delete lpb;
    file->Close(); 
    delete file; 
    }

    else 

    dataStore.WriteString(_T("到指定服务器的连接建立失败..."));