问题
在请求接口时,接口响应结果乱码,通过平常的编码格式转化来解码不能解决,观察接口的响应内容编码为Content-encoding: gzip。
解决办法
public static String uncompressString(String str) {
if (StringUtil.isEmpty(str)) {
return str;
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.ISO_8859_1));
GZIPInputStream gzipStream;
try {
gzipStream = new GZIPInputStream(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
byte[] buffer = new byte[256];
int n;
while (true) {
try {
if (!((n = gzipStream.read(buffer)) >= 0)) break;
} catch (IOException e) {
throw new RuntimeException(e);
}
outputStream.write(buffer, 0, n);
}
return outputStream.toString();
}
参考博客
请求网站响应的文本带有乱码,原来是Content-encoding惹的祸,一文带你搞懂Content-encoding、Accept-Encoding
当接口响应的Content-encoding为gzip时,常规解码方法无法解决乱码。文章提供了一个Java方法,通过GZIPInputStream对gzip压缩的内容进行解压,从而正确处理乱码问题。该方法首先将响应转换为字节数组,然后使用GZIPInputStream读取并写入到ByteArrayOutputStream,最后将结果转换回字符串。

950

被折叠的 条评论
为什么被折叠?



