在服务器端使用gzip压缩json串, 页面ajax请求到数据后解压缩,中文存在乱码。

相关代码

//pako.js 解压代码

 function unzip(b64Data){
    var strData     = atob(b64Data);
    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 strData;
}

// java服务器端使用gzip进行压缩

 
public static String gzip(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());
}    

你期待的结果是什么?实际看到的错误信息又是什么?

图片描述

问题描述

解析成json串后 中文发生乱码

问题出现的环境背景及自己尝试过哪些方法

使用gzip主要是为了加快页面请求json数据速度,在服务器端对中文进行编码后,js再解码也不行,求大神指点!

阅读 6k
2 个回答

getBytes()用的是系统默认字符集,可能和前端的字符集不一样
同理js中解码的时候也应该制定字符集
最后这种场景直接开servlet容器/nginx的压缩就行了,自己写压缩太麻烦而且效率不见得有这两个做得好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题