虽然 HttpClient 已经过时了,不过Retrofit我还不熟,所以今天按照网上的教程实现模拟登陆功能的时候,因为他用的是HttpClient,我也照着用了。
不过过程中发现服务器返回的数据是乱码,网上的大部分人说法都是在请求头里添加编码参数
httpRequest.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
或者在使用EntityUtils.toString( )时加上编码参数
EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
然而我都照着做了,没有卵用,还是乱码。
期间看到有位博主说他把响应头都打印出来查看,于是我也照着做,看看能不能发现什么问题,看了好几遍,看到下面这行
Content-Encoding gzip
我怀疑是这里出了问题,事实证明确实是这里出了问题
我在请求头里加了下面这行
httpRequest.addHeader("Accept-Encoding","gzip, deflate");
而加了这句后,服务器返回的数据会进行gzip压缩,所以乱码,但是在浏览器上,浏览器会对接受的数据自动解压缩,所以浏览器不会出现乱码问题。
把那行请求头去掉就好,就不会出现乱码了。当然这只是临时解决问题,更好的办法是添加解压缩的方法。