后端写法:
/**
* 使用gzip进行压缩
*/
public static String compress(String primStr) {
if (primStr == null || primStr.length() == 0) {
return primStr;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = null;
try {
gzip = new GZIPOutputStream(out);
gzip.write(primStr.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (gzip != null) {
try {
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new sun.misc.BASE64Encoder().encode(out.toByteArray());
}
前端接口接收:
unzip(b64Data) {
var strData = atob(b64Data);
console.log(strData);
var charData = strData.split("").map(function(x) {
return x.charCodeAt(0);
});
var binData = new Uint8Array(charData);
var data = pako.inflate(binData);
strData = String.fromCharCode.apply(null, new Uint16Array(data));
return JSON.parse(decodeURIComponent(strData));
},
如果数据中有乱码解决方法:
让后端同学在接口压缩之前加 encodeURIComponent转义一下,前端用decodeURIComponent解译。则不乱码。