我正在制作移动应用程序(不在浏览器中 - 因此没有传输层解决方案),需要将压缩数据发送回服务器。我在javascript中找到了几个可以很好地压缩文本的库,但它们似乎都输出了一个数组。
使用LZMA ......
"Lorem ipsum sit amet decorum rex quandum et futurus..."
变为
[93, 0, 0, 1, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 38, 27, -54, 70, 103, 90, -14, 119, -72, 125, -122, -40, 66, 28, -27, -90, 80, 22, 44, 97, -102, -55, 19, 62, 83, -53, -64, 78, -1, 99, 100, 124, 91, -47, 58, -66, -12, -40, -18, 109, 98, 108, -31, -77, -110, 59, -33, 14, -60, -4, -20, 108, -1, -1, 18, -57, 0, 0]
哪个好,但现在我需要以适合作为HTTP请求的一部分发送的格式对其进行编码。
我希望它以某种方式成为base64字符串,如果可能的话,因为它很容易在另一端解码,并且似乎适合任务 - 但我不知道如何将整数字符串转换为base64字符串。
答案 0 :(得分:1)
这将获取一个数组并返回Base64编码的字符串:
function(input)
{
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
while (i < input.length)
{
chr1 = input[i++];
chr2 = input[i++];
chr3 = input[i++];
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2))
enc3 = enc4 = 64;
else if (isNaN(chr3))
enc4 = 64;
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
}
return output;
}
答案 1 :(得分:1)
在现代浏览器上:
var s = myArray.map(function(n) {
return String.fromCharCode(n & 0xff); // to fix your negative values
}).join('');
var base64 = btoa(s);
其中btoa
是一个全局函数,如果不存在则可以是shimmed。