• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlで文字列を短く(圧縮)したい。)

perlで文字列を短く圧縮する方法

このQ&Aのポイント
  • perlで文字列を圧縮する方法について知りたいです。通し番号や日付などを数字で書く場合、桁数が大きくなるとパケットのサイズが気になります。文字列を圧縮して短くする方法はありますか?
  • 文字列を圧縮する方法について検討しています。例えば、バイナリレベルでの圧縮が可能なのか、また数字以外の文字が混じった場合にも対応できる方法があれば教えてください。
  • Compress::Zlibモジュールを使用して文字列を圧縮しましたが、出力結果が文字化けして使い物になりません。良い文字列圧縮方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

圧縮のアルゴリズムは、たくさんあります。 どれを選ぶか、もしくは組み合わせるかの問題かと思います。 メジャーなところで、zipなどの圧縮を行い、base64等の符号化処理をするのが 良いのではないでしょうか。 テキストor非テキストの文字列  ↓ ZIPアルゴリズムで圧縮(縮める)  ↓ 非テキストの文字列  ↓ base64符号化(問題ある制御符号を無くすためちょっと伸ばす)  ↓ テキスト文字列(7ビット文字だけの組み合わせ文字列) ただし、アルゴリズムや符号化の方式を選び間違うと、 元の文字列より長くなることがあるので、注意してください。 例えば、256バイト以下の対象データをLZHアルゴリズムで圧縮すると、 256バイト以上の圧縮結果となります。 また、符号化方式も、識別のため前後にマジックワードが付与されたり するので、対象データが短すぎると、大元の対象データより長くなる可能性も あります。 なお、当然ですが、復元するのに仕組みが必要になるので、相手が携帯であれば 携帯側に、javaなどで復元処理を実装することになると思いますので、メジャーなものを 組み合わせれば、復元側も既存のモノを流用できて良いと思います。

mai_540903
質問者

補足

回答いただきありがとうございます。 perl入門者ですので、とりあえず、分かる範囲内でやってみました。 use Compress::Zlib; $num = compress($num); print $num; print "\n<br>"; use MIME::Base64 (); $num = MIME::Base64::encode($num); print $num; print "\n<br>"; $num = MIME::Base64::decode($num); print $num; print "\n<br>"; $num = uncompress($num); print $num; print "\n<br>"; としてみたのですが、 100文字を、75文字程度にすることができました。 もう少し、圧縮率を上げることはできないものでしょうかね? また、”+=/”を含まないA-Za-z0-9のみで、Base64のような方法は無いものでしょうかね? また、全て、サーバー側で処理して行うため(今回は、URLのみの短縮を目的)、個人の方が作成されている手法でも良いのですが、何か、良いものは無いでしょうかね? ご存知でしたら、教えてください。 宜しくお願い致します。

関連するQ&A