Pot.js で利用可能。 PotLite.js では利用できません。
引数 string を AlphamericString で圧縮/解凍します。
AlphamericString は、LZ77 アルゴリズムをベースに
任意の Unicode 文字列を [0-9A-Za-z_] のみからなる文字列に圧縮するアルゴリズムです。
圧縮/解凍ともにパフォーマンスがよく、結果が [0-9A-Za-z_] の 63 文字だけなので
URI や ID などにそのまま使用でき、Base64 より実用的な場合もあります。
Pot.Archive.AlphamericString はコンストラクタではなく、ただのオブジェクトです。
関数 encode, decode で実行できます。
encode は、Pot.alphamericStringEncode() として
decode は、Pot.alphamericStringDecode() としてアクセスできます。
引数 string を AlphamericString でエンコードして返します。
Pot.alphamericStringEncode() で実行できます。
[0-9A-Za-z_] のみからなる文字列に圧縮された文字列が返ります。
AlphamericString でエンコードされた文字列 string をデコードして返します。
Pot.alphamericStringDecode() で実行できます。
解凍された文字列が返ります。
Pot.globalize() が適応されている場合、
Pot.AlphamericString.encode() が alphamericStringEncode()、
Pot.AlphamericString.decode() が alphamericStringDecode() で、それぞれ実行できます。
適応されていない場合は、
Pot.alphamericStringEncode(), Pot.alphamericStringDecode() で実行できます。
var string = 'Hello Hello foooooooo baaaaaaaar'; var result = Pot.alphamericStringEncode(string); var decode = Pot.alphamericStringDecode(result); debug('string = ' + string + ' : length = ' + string.length); debug('result = ' + result + ' : length = ' + result.length); debug('decode = ' + decode + ' : length = ' + decode.length); // // string = 'Hello Hello foooooooo baaaaaaaar' : length = 32 // result = 'Y8Z5CCF_v56F__5X0Z21__5I' : length = 24 // decode = 'Hello Hello foooooooo baaaaaaaar' : length = 32 //
var string = 'Hello Hello こんにちは、こんにちは、にゃーにゃー'; var result = Pot.alphamericStringEncode(string); var decode = Pot.alphamericStringDecode(result); // バイト数を取得 var bytesS = Pot.utf8ByteOf(string); var bytesR = Pot.utf8ByteOf(result); var bytesD = Pot.utf8ByteOf(decode); debug( 'string=' + string + ', length=' + string.length + ', ' + bytesS + ' bytes' ); debug( 'result=' + result + ', length=' + result.length + ', ' + bytesR + ' bytes' ); debug( 'decode=' + decode + ', length=' + decode.length + ', ' + bytesD + ' bytes' ); // -- 結果 -- // // string = 'Hello Hello こんにちは、こんにちは、にゃーにゃー', // length = 30, // 66 bytes // // result = 'Y8Z5CCF_v5cJeJdB1Fa1_v4dBe3hS_y1', // length = 32, // 32 bytes // // decode = 'Hello Hello こんにちは、こんにちは、にゃーにゃー', // length = 30, // 66 bytes //
encode/decode にはそれぞれ deferred というメソッドがあり、非同期で実行することが可能です。
非同期で実行することにより、巨大な文字列に対しても負荷を抑え実行することが可能です。
引数 string を AlphamericString で非同期でエンコードします。
エンコードされた結果を引数に持つ Pot.Deferred インスタンス が返ります。
Pot.alphamericStringEncode.deferred() で実行できます。
結果からは then() などによりチェインを繋げることができます。
Pot.alphamericStringEncode.deferred.slow()
のようにして速度の指定ができます。
指定できる名前は以下の表を参照ください。
デフォルトの速度は normal です。
値 / メソッド名 | 速度 |
limp | 最も遅い |
doze | 遅い |
slow | 遅め |
normal | 通常 |
fast | 速め |
rapid | 速い |
ninja | 最も速い |
AlphamericString でエンコードされた文字列 string を非同期でデコードします。
デコードされた結果を引数に持つ Pot.Deferred インスタンス が返ります。
Pot.alphamericStringDecode.deferred() で実行できます。
結果からは then() などによりチェインを繋げることができます。
Pot.alphamericStringDecode.deferred.slow()
のようにして速度の指定ができます。
指定できる名前は以下の表を参照ください。encode と同じです。
デフォルトの速度は normal です。
値 / メソッド名 | 速度 |
limp | 最も遅い |
doze | 遅い |
slow | 遅め |
normal | 通常 |
fast | 速め |
rapid | 速い |
ninja | 最も速い |
var string = 'Hello Hello foooooooo baaaaaaaar'; var encoded, decoded; // 非同期で実行 Pot.alphamericStringEncode.deferred(string).then(function(res) { encoded = res; return Pot.alphamericStringDecode.deferred(encoded); }).then(function(res) { decoded = res; debug('string = ' + string + ' : length = ' + string.length); debug('result = ' + encoded + ' : length = ' + encoded.length); debug('decode = ' + decoded + ' : length = ' + decoded.length); // // string = 'Hello Hello foooooooo baaaaaaaar' : length = 32 // result = 'Y8Z5CCF_v56F__5X0Z21__5I' : length = 24 // decode = 'Hello Hello foooooooo baaaaaaaar' : length = 32 // });
var string, encoded, decoded; string = 'Hello Hello こんにちは、こんにちは、にゃーにゃー'; // 非同期で実行 Pot.alphamericStringEncode.deferred(string).then(function(res) { encoded = res; Pot.alphamericStringDecode.deferred(res).then(function(res) { decoded = res; // バイト数を取得 var bytesString = Pot.utf8ByteOf(string); var bytesEncoded = Pot.utf8ByteOf(encoded); var bytesDecoded = Pot.utf8ByteOf(decoded); debug( 'string=' + string + ', length=' + string.length + ', ' + bytesString + ' bytes' ); debug( 'result=' + encoded + ', length=' + encoded.length + ', ' + bytesEncoded + ' bytes' ); debug( 'decode=' + decoded + ', length=' + decoded.length + ', ' + bytesDecoded + ' bytes' ); // -- 結果 -- // // string='Hello Hello こんにちは、こんにちは、にゃーにゃー', // length = 30, // 66 bytes // // result = 'Y8Z5CCF_v5cJeJdB1Fa1_v4dBe3hS_y1', // length = 32, // 32 bytes // // decode='Hello Hello こんにちは、こんにちは、にゃーにゃー', // length = 30, // 66 bytes // }); });