首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么解决http响应打印出乱码的有关问题

2012-02-10 
如何解决http响应打印出乱码的问题C/C++ code#include winsock.h#include stdio.hint main(){WSADATA

如何解决http响应打印出乱码的问题

C/C++ code
#include <winsock.h>#include <stdio.h>int main(){    WSADATA wsaData;        int Ret;    if ((Ret = WSAStartup(MAKEWORD(1,1), &wsaData)) != 0)    {      printf("WSAStartup failed with error %d\n", Ret);    }    SOCKET socketfd;    struct sockaddr_in addr;    int connectfd = 0;    char strsend[255], buffer[1024*1024];    memset((void*)strsend, 0, sizeof(strsend));    memset((void*)buffer, 0, sizeof(buffer));    memset((void*)&addr, 0, sizeof(addr));        addr.sin_family = AF_INET;    addr.sin_port = htons(80);    addr.sin_addr.S_un.S_addr = inet_addr("222.186.13.209");    socketfd = socket(AF_INET, SOCK_STREAM, 0);    if(socketfd < 0)    {      printf("socket fail %d\n");    }    connectfd = connect(socketfd, (struct sockaddr*)&addr, sizeof(addr));    if(connectfd < 0)        printf("connect fail\n");    strcpy(strsend, "GET /index.html HTTP/1.0\r\nHost:www.soshu.cn\r\n\r\n");    connectfd = send(socketfd, strsend, sizeof(strsend), 0);        connectfd = recv(socketfd, buffer, sizeof(buffer), 0);    if(connectfd == SOCKET_ERROR)    {      printf("%d\n",WSAGetLastError());    }      else printf("%s\n",buffer);      FILE* pFile = fopen("11.html","wb");      fprintf(pFile,buffer);      fclose(pFile);      //close(socketfd);        if (WSACleanup() == SOCKET_ERROR)    {      printf("WSACleanup failed with error %d\n", WSAGetLastError());    }        getchar();    return 0;}


[解决办法]
HTTP有一个参数叫Accept-Encoding,用来表示可以接收的编码类型,当取gzip,deflate时,服务器给返回的时压缩过后的数据,需要解压后才能看到原文,可以取plain,服务器就直接返回HTML源码了
[解决办法]
如果是中文乱码的话,那可能要服务端的文件改编码
如果连普通字符都乱码,那就要像一楼说的那样
在发送请求时,加一个http header,设置accept-encoding为plain
[解决办法]
探讨
HTTP有一个参数叫Accept-Encoding,用来表示可以接收的编码类型,当取gzip,deflate时,服务器给返回的时压缩过后的数据,需要解压后才能看到原文,可以取plain,服务器就直接返回HTML源码了

热点排行