1、在 度娘搜索 “javascript 解压缩gzip”,基本都是 pako.js相关的内容,先记录下:
js Gzip前台压缩字符串如何实现? - 知乎.html(https://www.zhihu.com/question/53169830)
Netty websocket 推送数据压缩以 js解压 - - ITeye博客.html(https://www.iteye.com/blog/zifeng412708-2320475)
JS GZIP压缩,GZIP解压_a_靖的博客-CSDN博客_js gzip.html(https://blog.csdn.net/qq_35713752/article/details/82079629)
2、遇到实际问题:ArrayBuffer(base64编码的jpg图片数据) 数据过长,导致 转 javascript.string时报错:
转换的操作:String.fromCharCode.apply(null, new Uint8Array(data)); // 这里的 data就是 websocket传来的数据(类型:ArrayBuffer) // ∵ 我Python传来的是 信息是byte数组,∴这里使用Uint8Array强转。其它情况可使用 Uint16Array等来强转
报错信息:String.fromCharCode.apply(null, new Uint8Array(data))
参考网址:(里面涉及到 一点点 pako的使用)
String.fromCharCode.apply Maximum call stack size exceeded – 前端开发,JQUERY特效,全栈开发,vue开发.html(https://www.jqhtml.com/62603.html)
网页中代码保存:
let strData = atob(result.data); // Convert binary string to character-number array let charData = strData.split('').map(function (x) { return x.charCodeAt(0); }); // Turn number array into byte-array let binData = new Uint8Array(charData); // // unzip let array = pako.inflate(binData); // ZC: pako 解压 <-- <-- <-- // ZC: 很长的(8*1024字节)字符数字 转 字符串 的方案 <-- <-- <-- <-- <-- strData = '' /** * String.fromCharCode.apply(null, array) 显示 Maximum call stack size exceeded * 超过最大调用堆栈大小 */ let chunk = 8 * 1024; let i; for (i = 0; i < array.length / chunk; i++) { strData += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk)); } strData += String.fromCharCode.apply(null, array.slice(i * chunk)); // 将乱码的中文进行转换 let jsonResult = decodeURIComponent(escape((strData)))
3、
4、
5、