1

我最终必须使用如下所示的 Javascript 文件中的一些数据:

注意: base64 只是说明性的。

function GetTripsDataCompressed() { return 'QlpoOTFBWSZTWdXoWuEDCAgfgBAHf/.....=='; }

GetTripsDataCompressed()返回一个base64字符串,该字符串派生为使用JSON.NET转换为 JSON 的对象数组,然后使用SharpCompress将生成的字符串压缩为 bzip2 ,生成的内存流经过 Base64 编码。

这就是我所拥有的,无法改变。

我正在努力寻找一个 bzip2 JavaScript 实现,它将获得以下结果:

var rawBzip2Data = atob(GetTripsDataCompressed());

并将 rawBzip2Data 转换回 JSON 数组的字符串。我不能使用compressjs之类的东西,因为我需要支持 IE 10,并且因为它使用类型化数组,这意味着 IE10 支持不可用。

所以看来我最好的选择是https://github.com/antimatter15/bzip2.js但是因为我没有创建一个档案,只有 bzip2 一个字符串,它会Uncaught No magic number found在执行后引发错误:

var c = GetTripsDataCompressed();
c = atob(c);
var arr = new Uint8Array(c);
var bitstream = bzip2.array(arr);
bzip2.simple(bitstream);

那么任何人都可以在这里帮助我使用符合 IE 10 的脚本从 JavaScript 中解压缩 BZip2、Base64 编码的字符串吗?最终,我不在乎它是使用https://github.com/antimatter15/bzip2.js还是其他一些本机 JavaScript 实现。

4

1 回答 1

1

在我看来,答案在自述文件中:

decompress(bitstream, size[, len])对单个块进行主要解压缩。如果它检测到它是最后一个块,它将返回 -1,否则它返回一个带有解压缩数据的字符串。如果要将输出限制为一定数量的字节,请设置 len 参数。

另外,请记住存储库没有附加许可证。如果您想使用该代码,您需要联系作者。鉴于存储库已有八年历史,这可能会很棘手。

另一方面,Bzip2 算法本身是开源的(类似 BSD 的许可证),因此您可以自己用 Javascript 重新实现它。它只是几百行相对简单的代码。

于 2019-04-08T06:53:27.773 回答