• ベストアンサー

UTF-8から送信されたデータを日本語化するには?

%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A これを あいうえお に変換するには、どのようにデコードすればいいのでしょうか? ご教授お願いします。m(_ _)m [現在のソース] $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; my $value = Jcode::convert($value, 'utf8'); $FORM{$name} = $value; } ↓ 「縺ゅ>縺・∴縺・」が検出されます。

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

  • ベストアンサー
  • ticky
  • ベストアンサー率36% (123/337)
回答No.4

my $value = Jcode::convert($value, 'utf8'); の、Jcodeの使い方が違いますね。 ("my"はいらないような気がする) Jcode::convert($str, [$ocode, $icode, $opt]); ですから、 eucに変換したければ $value = Jcode::convert($value, 'euc', 'utf8'); です。

参考URL:
http://openlab.ring.gr.jp/Jcode/Jcode.html
abiru
質問者

お礼

ビンゴです。 ありがとうございました。m(_ _)m

その他の回答 (3)

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.3

#1 です。初期化を忘れました(^^;) use Encode; $data = "%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A"; $data = encode("sjis", decode("utf8", penc2bin($data))); print $data; exit(0); sub penc2bin { my($d) = @_; my($i, $r); $r = ''; for ($i = 0; $i <= length($d)-1; $i+=3) { $r .= pack("C", hex(substr($d, $i+1, 2))); } ($r); }

abiru
質問者

お礼

Perlのバージョンが少し古くて(5.6.1)、Encode.pm(5.7.3以上)がインストールできませんでした。(;-;) しかし勉強になりました。 ありがとうございました。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.2

#1 です。 デコード部分だけですが。参考にしてください。 use Encode; $data = "%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A"; $data = encode("sjis", decode("utf8", penc2bin($data))); print $data; exit(0); sub penc2bin { my($d) = @_; my($i, $r); for ($i = 0; $i <= length($d)-1; $i+=3) { $r .= pack("C", hex(substr($d, $i+1, 2))); } ($r); }

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

encode.pm を利用します。 encode.pm と言うモジュールがあります。これを利用すると変換することができます。 http://digit.que.ne.jp/work/index.cgi?Encode に具体的な使い方が掲載されています。参考になると思います。

関連するQ&A