以下是我用pako:
压缩二进制字符串(高于255的字符代码)的方法var charData = xhr.responseText.split('').map(function(x){return x.charCodeAt(0);});
var binData = new Uint8Array(charData);
var data = pako.deflate(binData, {level:"9"});
以下是我如何解压缩数据的方法:
var data2 = pako.inflate(xhr.responseText);
现在,如何从此对象获取JavaScript中的原始字符串? 我尝试过这样的方法:
一个。
pako.inflate(xhr.responseText, {to:"string"});
乙
String.fromCharCode.apply(null, data2);
下进行。
for (var i = 0, l = data2.length; i < l; i++)
{
result += String.fromCharCode(parseInt(array[i], 2));
}
所有这些方法都会将不同的数据作为JavaScript字符串而不是原始字符串。 当我将解压缩的pako.inflate(xhr.responseText)保存到文件(使用具有a.download的函数)时,dempressed文件与原始文件具有完全相同的字节(因此压缩和解压缩工作正常,没有任何字节修改)。
答案 0 :(得分:0)
我只是想做同样的事情,并且找到了一种将Object转换为二进制字符串,反之亦然的方法。我只是创建了两个函数,将JSON对象转换为Binary String和Binary String转换为JSON Object即。 CovertObjectToBinary和convertBinaryToObject。
let obj = {a:1}
function covertObjectToBinary(obj) {
let output = '',
input = JSON.stringify(obj) // convert the json to string.
// loop over the string and convert each charater to binary string.
for (i = 0; i < input.length; i++) {
output += input[i].charCodeAt(0).toString(2) + " ";
}
return output.trimEnd();
}
function convertBinaryToObject(str) {
var newBin = str.split(" ");
var binCode = [];
for (i = 0; i < newBin.length; i++) {
binCode.push(String.fromCharCode(parseInt(newBin[i], 2)));
}
let jsonString = binCode.join("");
return JSON.parse(jsonString)
}
console.log('covertObjectToBinary =>', covertObjectToBinary(obj))
console.log('convertBinaryToObject =>', convertBinaryToObject(covertObjectToBinary(obj)))