如果使用String侦听器,则响应似乎会丢失其编码.
你如何使用Volley处理gzip响应?
主要编辑:
HttpUrlConnection会自动将gzip标头添加到请求中,如果响应被gzip压缩,它将无缝解码并向您呈现响应.所有的gzip都发生在幕后,你不需要做我在gist中发布的内容作为这个问题的答案.请参阅此处的文档http://developer.android.com/reference/java/net/HttpURLConnection.html
事实上,我发布的答案不应该被使用,因为gzip解码非常慢,应该由HttpUrlConnection处理.
这是文档中的确切部分:
By default,this implementation of HttpURLConnection requests that
servers use gzip compression. Since getContentLength() returns the
number of bytes transmitted,you cannot use that method to predict how
many bytes can be read from getInputStream(). Instead,read that
stream until it is exhausted: when read() returns -1. Gzip compression
can be disabled by setting the acceptable encodings in the request
header:
urlConnection.setRequestProperty(“Accept-Encoding”,“identity”);
解决方法
基本上,我扩展了StringRequest,以便以不同的方式处理网络响应.
您可以使用GZipInputStream解析响应bytearray并返回结果字符串.