- ベストアンサー
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; } ↓ 「縺ゅ>縺・∴縺・」が検出されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
my $value = Jcode::convert($value, 'utf8'); の、Jcodeの使い方が違いますね。 ("my"はいらないような気がする) Jcode::convert($str, [$ocode, $icode, $opt]); ですから、 eucに変換したければ $value = Jcode::convert($value, 'euc', 'utf8'); です。
その他の回答 (3)
- Dpop
- ベストアンサー率51% (279/544)
#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); }
お礼
Perlのバージョンが少し古くて(5.6.1)、Encode.pm(5.7.3以上)がインストールできませんでした。(;-;) しかし勉強になりました。 ありがとうございました。
- Dpop
- ベストアンサー率51% (279/544)
#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)
encode.pm を利用します。 encode.pm と言うモジュールがあります。これを利用すると変換することができます。 http://digit.que.ne.jp/work/index.cgi?Encode に具体的な使い方が掲載されています。参考になると思います。
お礼
ビンゴです。 ありがとうございました。m(_ _)m