Decode

ネットワークを制御するコードと同じコードは送信出来ないので、日本語は Encode されています。

URL Decode

  1. エディタで URLDecode.pl を作成して下さい。
    $s1= "%E5%89%8D%E7%94%B0%E3%80%80%E7%A8%94";
    
    $s1 =~ tr/+/ /;
    $s1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
    print $s1. "\n";
    
  2. $s1 は FORM から呼び出す を実行して「前田 稔」とタイプしたもので、送信された日本語は URL Encode されています。
    URL Encode された文字列($s1)を Decode して印字します。
    Decode で行う処理は次の2つです。
  3. 【実行画面】
    FORM から呼び出す でタイプしたコードは utf-8 なので、$s1 を Decode すると utf-8 に戻ります。
    コマンドプロンプトから utf-8 のコードを印字すると文字化けします。
    そこで実行結果を w.txt にリダイレクトして、エデッタで確認しました。
    C:\DATA\Perl>perl URLDecode.pl > w.txt
    
    C:\DATA\Perl>
    
    w.txt を utf-8 が表示できるエディタで確認して下さい。
    前田 稔
    

コマンドプロンプトで印字

  1. エディタで Decode.pl を作成して下さい。
    use Encode;
    
    $s1= "%E5%89%8D%E7%94%B0%E3%80%80%E7%A8%94";
    $s2= "%E6%BC%A2%E5%AD%97%E3%81%AF+encode+%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99";
    
    $s1 =~ tr/+/ /;
    $s1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
    $str = Encode::decode('utf-8', $s1);
    $str = Encode::encode('shift_jis', $str);
    print $str. "\n";
    
    $s2 =~ tr/+/ /;
    $s2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
    $str = Encode::decode('utf-8', $s2);
    $str = Encode::encode('shift_jis', $str);
    print $str. "\n";
    
  2. 【実行画面】
    C:\DATA\Perl>perl Decode.pl
    前田 稔
    漢字は encode されます
    
    C:\DATA\Perl>
    
  3. $s1, $s2 は FORM から呼び出す で日本語タイプしたものです。
    送信された日本語は URL Encode されています。
    $s1= "%E5%89%8D%E7%94%B0%E3%80%80%E7%A8%94";
    $s2= "%E6%BC%A2%E5%AD%97%E3%81%AF+encode+%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99";
    
  4. URL Encode された文字列を Decode します。
    $s1 =~ tr/+/ /;
    $s1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
    
  5. 今回は $s1(utf-8) を shift_jis に変換してコマンドプロンプトから直接印字します。
    $s1(utf-8) ⇒ $str(Wide character) ⇒ $str(shift_jis) で印字します。
    $s1(utf-8) を decode して Wide character(プログラムの内部コード)に変換します。
    $str = Encode::decode('utf-8', $s1);
    
    Wide character をコマンドプロンプトで印字しようとすると次の警告が表示されます。
    Wide character in print at test.pl line 9.
    
    Wide character を encode して shift_jis に変換して印字します。
    $str = Encode::encode('shift_jis', $str);
    print $str. "\n";
    

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(Perl)