0

圧縮データをサーバーに送り返す必要があるモバイルアプリ(ブラウザーではないため、トランスポート層ソリューションはありません)を作成しています。テキストをうまく圧縮できる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文字列に変換する方法がわかりません。

4

2 に答える 2

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;
    }
于 2013-02-04T11:21:49.310 に答える
1

最新のブラウザ:

var s = myArray.map(function(n) {
    return String.fromCharCode(n & 0xff);  // to fix your negative values
}).join('');

var base64 = btoa(s);

whereは、存在しない場合にシムbtoaできるグローバル関数です。

于 2013-02-04T11:25:00.310 に答える