Java后端请求不同环境下的同一接口,有的环境会出现乱码问题

问题描述

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();
相关推荐
她和夏天一样热几秒前
【实战篇】设计模式在开发中的真实应用
java·开发语言·设计模式
小帅学编程2 分钟前
设计模式笔记
java
TheSumSt6 分钟前
Python丨课程笔记Part2:方法论进阶部分
开发语言·笔记·python
微爱帮监所写信寄信12 分钟前
微爱帮监狱寄信写信小程序:深入理解JavaScript中的Symbol特性
开发语言·javascript·网络协议·小程序·监狱寄信·微爱帮
ss27320 分钟前
线程池工作机制:从任务提交到执行的完整决策流程
java·开发语言
syt_101328 分钟前
js基础之-如何理解js中一切皆对象的说法
开发语言·javascript·原型模式
yaoxin52112331 分钟前
276. Java Stream API - 使用 flatMap 和 mapMulti 清理数据并转换类型
java·开发语言·windows
Vic1010133 分钟前
【无标题】
java·数据库·分布式
摇滚侠36 分钟前
Java 零基础全套视频教程,异常,处理异常,自定义异常,笔记 124-129
java·笔记
lsx20240641 分钟前
Chart.js 极地图
开发语言