问题描述
Java后端请求不同环境下的同一接口,有的环境会出现乱码问题,而 ApiPost 调用正常。
原因
有的后端启用了 gzip 压缩,但我的客户端没解压!
某个环境(如生产)的 Nginx / Spring Boot 启用了 gzip 响应压缩,那么:
- 服务器会返回 gzip 压缩后的二进制数据
- 但我的代码直接用 InputStreamReader(..., "UTF-8") 去读 → 把压缩后的二进制当作文本解码 →
必然乱码(通常是 ``
解决方案
检测并自动解压 gzip 响应
java
import java.util.zip.GZIPInputStream;
import java.util.zip.InflaterInputStream;
// ... 在 try 块中,发送请求后 ...
// 获取输入流(可能是 gzip 压缩的)
InputStream inputStream = conn.getInputStream();
String contentEncoding = conn.getContentEncoding();
if ("gzip".equalsIgnoreCase(contentEncoding)) {
inputStream = new GZIPInputStream(inputStream);
} else if ("deflate".equalsIgnoreCase(contentEncoding)) {
inputStream = new InflaterInputStream(inputStream);
}
BufferedReader in = new BufferedReader(
new InputStreamReader(inputStream, StandardCharsets.UTF_8)
);
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
in.close();