新手求助,C++实现HTTP协议出现中文乱码。

Hanson1129 2012-03-27 11:47:55
最近刚刚学HTTP协议,抓取网页时比如百度、新浪都没有问题,但抓取SOHU的时候就会出现中文乱码问题,求助。
源码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData={0};
SOCKET sock;
struct sockaddr_in addr;
struct hostent *pUrl;
char myurl[]="www.sohu.com";
char host[BUFSIZ],GET[BUFSIZ],*pHost=0;
char header[BUFSIZ]="";
static char text[BUFSIZ];
if(WSAStartup(MAKEWORD(2,2),&wsaData))
{
printf("WSA failed\n");
return 0;
}
for(pHost=myurl;*pHost!='/'&&*pHost!='\0';pHost++);
if(int(pHost-myurl)==strlen(myurl))
{
strcpy(GET,"/");
}
else
{
strcpy(GET,pHost);
}
*pHost='\0';
strcpy(host,myurl);
sock=socket(AF_INET,SOCK_STREAM,0);
pUrl=gethostbyname(host);
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=*((unsigned long*)pUrl->h_addr);
addr.sin_port=htons(80);
strcat(header, "GET ");
strcat(header, GET);
strcat(header, " HTTP/1.1\r\n");
strcat(header, "HOST: ");
strcat(header, host);
strcat(header,"\r\nAccept-language:zh-CN");
strcat(header, "\r\nConnection: Close\r\n\r\n");
connect(sock,(SOCKADDR*)&addr,sizeof(addr));
send(sock,header,strlen(header),0);
while(recv(sock,text,BUFSIZ,0)>0)
{
cout<<text;
strnset(text,'\0',BUFSIZ);
}
closesocket(sock);
WSACleanup();
return 0;
}
...全文
364 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saingel 2012-03-28
  • 打赏
  • 举报
回复
乱码很正常,很多网站都用gzip压缩
JoeBlackzqq 2012-03-28
  • 打赏
  • 举报
回复
用你的程序运行了,发现返回的内容中前面部分是:
host: www.sohu.com
HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 78418

Connection: close

Date: Wed, 28 Mar 2012 06:43:41 GMT

Server: SWS

Vary: Accept-Encoding,X-Up-Calling-Line-id,X-Source-ID,X-Up-Bearer-Type

Cache-Control: max-age=70

Expires: Wed, 28 Mar 2012 06:44:51 GMT

Last-Modified: Wed, 28 Mar 2012 06:42:51 GMT

Content-Encoding: gzip

FSS-Cache: HIT from 4086639.6118265.5480846

----------------------------------------------------
正如楼上所料,是压缩格式的!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧