问题现象:
用postman调用接口返回参数正常,但是代码中解析返回数据乱码问题。
分析解决:
如果 header中的Content-Encoding 值为 br,传统方式为gzip,两者相比启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量能够减少 20%。但是通过传统办法无法解析数据会造成返回值乱码。
痛点
用httpclient调用接口,返回值是被br压缩的,用 EntityUtils.toString(entity, Consts.UTF_8)处理也不可以。
这样就拿不到自己想要的东西
解决
//导入包
import org.brotli.dec.BrotliInputStream;
/**
* 对brotli格式的数据解码
*
* @param text 需要处理的数据
* @return 处理后的数据
*/
private byte[] unZipBrotli(byte[] text) {
try (BrotliInputStream brotliInputStream = new BrotliInputStream(new ByteArrayInputStream(text));
ByteArrayOutputStream swapStream = new ByteArrayOutputStream()) {
//buff用于存放循环读取的临时数据
byte[] buff = new byte[100];
int rc;
while ((rc = brotliInputStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
return swapStream.toByteArray();
} catch (IOException ioException) {
throw new BusinessException("解压缩数据发生异常:" + ioException.getMessage());
}
}