0

我不知道我的代码有什么问题,但它不会向标准输出打印任何内容,尽管调试器中显示了一些内容。

#include "stdafx.h"
#include <afx.h>
#include <afxinet.h>

#include <iostream>
#include <list>
#include <string>
#include <vector>
#include "wininet.h"

using namespace std;



void DisplayPage(LPCTSTR pszURL)
{
   CInternetSession session(_T("Mozilla/5.0"));
   CStdioFile* pFile = NULL;
   pFile = session.OpenURL(pszURL);
   CString str = _T("");


   while ( pFile->ReadString(str) )
   {
       wcout << str.GetString() << endl;  // <-- here I expect some output, get nothing
                                            //     not even newline !
   }

   delete pFile;
   session.Close();
}


// --- MAIN ---
int _tmain(int argc, _TCHAR* argv[])
{
    DisplayPage( _T("http://www.google.com") );

    cout << "done !" << endl;
    cin.get();

    return 0;
}

这是一个控制台项目。控制台窗口弹出消息“完成!” 仅显示。

4

1 回答 1

0

如果有人对此感兴趣,则该问题是由尝试写入默认控制台的网页收到的非 OEM 字符引起的(期望 OEM 字符,翻译模式)。在第一个非 OEM 字符处,std::wcout 停止处理。将控制台设置为二进制模式或将接收到的字符串转换为适当的编码,然后再发送到标准输出。

#include <fcntl.h>
#include <io.h>

...
int old_transmode = _setmode(_fileno(stdout), _O_U16TEXT);
std::wcout << str.GetString() << std::endl;    // print wide string characters
...
_set_mode(_fileno(stdout), old_transmode);    // restore original console output mode
于 2012-06-02T12:44:39.947 回答