TOP > スクリプト制作メモ > Perl/JavaScriptによるエンコード・デコード処理

≫エンコード・デコード処理とは

エンコード・デコードのもともとの意味は、
エンコード = 暗号化
デコード = 解読する
です。

広くは、情報を一意のデジタル形式に変換することをエンコードと言い、エンコードされたものを元に戻すことをデコードと言います。

エンコード・デコードがなぜ必要かというと、通信上意味をなす文字を正しくやりとりするためです

例えば、インターネット上で、ブラウザからサーバにデータをPOSTする際には、データを Key=Value&Key2=Value2 という風な形式で送ります。
この時、Key や Value に = や & が含まれていたりすると、厄介なことが起きます。
なので、
value に「a&b」という文字列を送ろうとすると、エンコードされ「a%26b」という文字列になります。

この、「a&b」を「a%26b」に変換する処理をエンコード、「a%26b」を「a&b」に変換する処理をデコードと言います

ちなみに、
Key=Value&Key2=Value2 を Key=Value と Key2=Value2 に分解する処理は、パーズ処理(構文解析処理)と言います。

また、プログラミング上で意味をなす文字を正しく文字として認識させるためにも似たようなことを行いますが、そちらは「エスケープする」などと言われます。

このページでは、CGIでよく利用するPerlやJavaScriptにおける、エンコード・デコード処理についてまとめてみたいと思います。

≫実例サンプル

  • URLエンコード(URLエスケープ)
    「愛 誠」を「%E6%84%9B+%E8%AA%A0」に変換する
    $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;
    $str =~ tr/ /+/;

  • URLデコード(URLアンエスケープ)
    「%E6%84%9B+%E8%AA%A0」を「愛 誠」に変換する
    $str =~ tr/+/ /;
    $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;

  • Base64エンコード
    モジュールのインストールはCPANから。perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")'
    $str は EUC-JP 前提。
    use MIME::Base64;
    $encoded_str = encode_base64($str);

  • Base64デコード
    use MIME::Base64;
    $str = decode_base64($encoded_str);

  • メールサブジェクトエンコード
    mimew.pl → http://www.cc.rim.or.jp/~ikuta/mime_pls/document.html
    $str は JIS 前提。
    require "mimew.pl";
    $str = mimeencode($str);

  • メールサブジェクトデコード
    require "mimer.pl";
    $str = mimedecode($str);


TOP > スクリプト制作メモ > Perl/JavaScriptによるエンコード・デコード処理
(C) bayashi.net