JavaScriptで文字列を圧縮する
jsで文字列を圧縮する方法を探していたらこんなページを見つけました。
javascript - でデータを圧縮/伸張する
これを使えば良いやと思っていたら、あるデータパターンで上手く復元できないことがありました。
とりあえず
JavaScript文字列(UTF-16)をUTF8化
↓
RawDeflate.deflate()
↓
base64エンコード
とすれば圧縮できて、逆をすれば復号ができるようなので難しいことは考えず確実に簡単に動くものを作りました。
高度なJavaScript技集にあるdeflate.js(圧縮用)とinflate.js(復号用)をHTML内で読み込んで下記のような関数を定義。
// 圧縮関数 (要deflate.js) function deflate(val) { val = encodeURIComponent(val); // UTF16 → UTF8 val = RawDeflate.deflate(val); // 圧縮 val = btoa(val); // base64エンコード return val; } // 復号関数 (要inflate.js) function inflate(val) { val = atob(val); // base64デコード val = RawDeflate.inflate(val); // 復号 val = decodeURIComponent(val); // UTF8 → UTF16 return val; }
サンプル