我不知道我的代码有什么问题,但它确实没有打印到stdout,尽管调试器中显示了一些内容。
#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;
}
这是一个控制台项目。弹出控制台窗口,显示消息“done!”。
答案 0 :(得分: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