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();
相关推荐
鲨鱼辣钊4 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
不正经学生5 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技5 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风8 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
学长毕业设计8 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx8 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西8 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西8 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午8 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065259 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql