我正在尝试使用WinInet下载网页。我使用了这里给出的代码:http://www.cplusplus.com/forum/windows/109799/
它基本上是有效的,但似乎有一些编码问题,我不知道如何解决。
例如,这一行(使用www.stackoverflow.com作为示例页面(:
<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?v=48511da708b8">
返回为此行:
<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?cks.css?ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌðA6÷v=48511da708b8">
(为了避免垃圾邮件,我实际上已经删除了大多数特殊字符(
在此代码中:
while(InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead )
{
cout << DataReceived;
}
CCD_ 1正在接收任意字节。它不是以null结尾的字符串,但代码正在将其传递给operator<<
重载,该重载需要以null结束的字符串。因此,打印超过了接收数据的末尾,从周围的存储器打印字节,直到遇到随机0x00
字节。
使用istream::write()
方法,这样您就可以准确地告诉它要打印多少个字符:
cout.write(DataReceived, NumberOfBytesRead);