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();
相关推荐
码匠许师傅20 分钟前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
ChaHae-In22 分钟前
MyBatis入门操作
java·mybatis
xcLeigh27 分钟前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
(Charon)28 分钟前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
青山木33 分钟前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年36 分钟前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
liwulin050639 分钟前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium
szephyr42 分钟前
腾讯云 ADP 智能体的 Skills 版本回滚总是回到旧配置,是缓存没清还是版本管理没开?
java·缓存·腾讯云
JavaPub-rodert43 分钟前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
云烟成雨TD1 小时前
Micrometer 系列【39】链路追踪:入门案例 | 环境准备
java·云原生·链路追踪