怎么解决http响应打印出乱码的有关问题
如何解决http响应打印出乱码的问题
------解决方案--------------------
HTTP有一个参数叫Accept-Encoding,用来表示可以接收的编码类型,当取gzip,deflate时,服务器给返回的时压缩过后的数据,需要解压后才能看到原文,可以取plain,服务器就直接返回HTML源码了
------解决方案--------------------
如果是中文乱码的话,那可能要服务端的文件改编码
如果连普通字符都乱码,那就要像一楼说的那样
在发送请求时,加一个http header,设置accept-encoding为plain
------解决方案--------------------
- 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
------解决方案--------------------