retrofit请求自己在拦截器获取数据判断时乱码问题

    xiaoxiao2024-10-29  83

    之前一直用的网络请求代码一直是retrofit+okhttp+rxjava,为了统一处理错误码防止数据不对时gson转换异常而写了一个拦截器 获取返回数据,然后判断格式和错误码

    private String bufferBody(Response response) throws IOException { BufferedSource source = response.body().source(); source.request(Long.MAX_VALUE); Buffer buffer = source.buffer(); return buffer.clone().readString(Charset.forName("UTF-8")); }

    在一个新项目中使用的时候一直解析出来的数据是乱码,浏览器访问数据正确,postman访问接口也正确,经过一番思考以及抓包数据分析发现返回数据头有一些变化 以前信息头 现在数据的头部 发现多了一个Content-Encoding: gzip,所以导致解析失败的原因是这个头的问题

    最后修改解析代码

    private String bufferBody(Response response) throws IOException { Headers headers = response.headers(); ResponseBody responseBody = response.body(); BufferedSource source = responseBody.source(); source.request(Long.MAX_VALUE); // Buffer the entire body. Buffer buffer = source.buffer(); // 判断是否有压缩 if ("gzip".equalsIgnoreCase(headers.get("Content-Encoding"))) { GzipSource gzippedResponseBody = null; try { gzippedResponseBody = new GzipSource(buffer.clone()); buffer = new Buffer(); buffer.writeAll(gzippedResponseBody); } finally { if (gzippedResponseBody != null) { gzippedResponseBody.close(); } } } return buffer.clone().readString(Charset.forName("UTF-8")); }

    大功告成!!!

    最新回复(0)