网络请求中的多种编码乱码问题
来源:互联网 发布:阿里云服务器做网站 编辑:程序博客网 时间:2024/05/29 12:22
> HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型的,常见的有:
Accept-Encoding: compress, gzip //支持compress 和gzip类型
Accept-Encoding: //默认是identity
Accept-Encoding: * //支持所有类型
Accept-Encoding: compress;q=0.5, gzip;q=1.0 //按顺序支持 gzip , compress
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 // 按顺序支持 gzip , identity
服务器返回的对应的类型编码header是 content-encoding
> gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;deflate是一种压缩算法,是huffman编码的一种加强。
deflate与gzip解压的代码几乎相同,可以合成一块代码。
区别仅有:
deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。
Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。
deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。
因为设置了Accept-Encoding: gzip,deflate,所以服务器返回的是压缩后的数据,而本地客户端却没有对这些数据进行解压缩因此得到的便是一堆乱码了。
解决方案就是去掉Accept-Encoding: gzip,deflate 直接让服务器返回文本。
> 浏览器打开HTML页面(UTF-8编码)是总是乱码,<meta chartset=UTF-8 >
记事本的话,默认保存的文件格式是ANSI。所以在保存的时候要修改为UTF-8。
> httpURLConnection.setRequestProperty("Charset", "utf-8");
拼接参数时:转一下格式:URLEncoder.encode(String.valueOf(value), "utf-8")
Accept-Encoding: compress, gzip //支持compress 和gzip类型
Accept-Encoding: //默认是identity
Accept-Encoding: * //支持所有类型
Accept-Encoding: compress;q=0.5, gzip;q=1.0 //按顺序支持 gzip , compress
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 // 按顺序支持 gzip , identity
服务器返回的对应的类型编码header是 content-encoding
> gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;deflate是一种压缩算法,是huffman编码的一种加强。
deflate与gzip解压的代码几乎相同,可以合成一块代码。
区别仅有:
deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。
Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。
deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。
因为设置了Accept-Encoding: gzip,deflate,所以服务器返回的是压缩后的数据,而本地客户端却没有对这些数据进行解压缩因此得到的便是一堆乱码了。
解决方案就是去掉Accept-Encoding: gzip,deflate 直接让服务器返回文本。
> 浏览器打开HTML页面(UTF-8编码)是总是乱码,<meta chartset=UTF-8 >
记事本的话,默认保存的文件格式是ANSI。所以在保存的时候要修改为UTF-8。
> httpURLConnection.setRequestProperty("Charset", "utf-8");
拼接参数时:转一下格式:URLEncoder.encode(String.valueOf(value), "utf-8")
阅读全文
0 0
- 网络请求中的多种编码乱码问题
- 网络请求时编码问题
- 请求参数中的乱码问题
- 关于volley网络请求框架乱码问题
- 解决网络请求json字符串乱码问题
- 网络请求中文编码格式问题处理
- android http get请求中的乱码问题
- Ajax请求中的中文乱码问题
- struts1(7)----请求数据中的乱码问题
- 编码 乱码 请求、响应乱码
- 关于web请求中的编码解码问题
- 解决dos中的乱码以及编码问题
- JSP中的编码问题-解决页面乱码
- DOS中的乱码以及编码的问题
- 字符编码和Java中的乱码问题
- 安卓中的乱码以及编码问题
- java中的乱码及编码问题
- 字符编码和Java中的乱码问题
- Codeforces 833B (Codeforces Round #426) The Bakery DP+线段树
- SpringBoot开发案例之整合Swagger篇
- 【Machine Learning】笔记:无监督学习之 Neighbor Embedding
- OpenLayers2---Features
- 正则表达式
- 网络请求中的多种编码乱码问题
- Ubuntu快速上手指南
- Java基本数据类型
- 删除GitHub里的仓库
- spring事物管理
- 笨方法学Python 习题0
- Thread、Handler、HandlerThread的区别
- 数学中的线性相关概念
- 【备忘】2017年最新 项目实战 Spring Boot视频教程 微服务整合Mybatis