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
//
});
});