PerlでUTF8でURLデコードするにはどうしたら良いでしょうか?


ネットで紹介されていた下記コードを実行すると、文字化けしてしまいます。
どうやらS-jisでデコードしてしまっているようです。

<前提>
"テスト" をUTF8でURLエンコードすると "%e3%83%86%e3%82%b9%e3%83%88" となる。
この "%e3%83%86%e3%82%b9%e3%83%88" を "テスト" に戻すコードが知りたい。
下記コードだと文字化けして "鄙サ險ウ莨夂、セ" となってしまう。

<現在のコード>
$str = "%e3%83%86%e3%82%b9%e3%83%88";
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
print($str);

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/09/10 16:15:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ele_dir No.1

回答回数263ベストアンサー獲得回数20

ポイント35pt

テキストデータに、これを作成して、試してみてください。

当方の環境では正常に動作しました。

$str = "%e3%83%86%e3%82%b9%e3%83%88";

$str =~ tr/+/ /;

$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;

use Encode qw/ from_to /;

&from_to( $str, "utf8", "shiftjis" );

open(FH,">test.txt");

print $str;

print FH $str;

close(FH);


結果:

テスト

作成ファイル

test.txt

内容

テスト



URLデコードアプリ

id:tetlis

ありがとうございます。完璧です!

2008/09/10 16:14:57

その他の回答1件)

id:ele_dir No.1

回答回数263ベストアンサー獲得回数20ここでベストアンサー

ポイント35pt

テキストデータに、これを作成して、試してみてください。

当方の環境では正常に動作しました。

$str = "%e3%83%86%e3%82%b9%e3%83%88";

$str =~ tr/+/ /;

$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;

use Encode qw/ from_to /;

&from_to( $str, "utf8", "shiftjis" );

open(FH,">test.txt");

print $str;

print FH $str;

close(FH);


結果:

テスト

作成ファイル

test.txt

内容

テスト



URLデコードアプリ

id:tetlis

ありがとうございます。完璧です!

2008/09/10 16:14:57
id:ele_dir No.2

回答回数263ベストアンサー獲得回数20

ポイント35pt

すいません。環境について記載し忘れました。

↑テキストデータに、これを作成して、試してみてください。

当方の環境(ActivePerlv5.8.8,WinXpProSP3,Windows付属テキストエディターにて作成)では問題なく正常に動作しました。

これで正常に動作しない場合、詳しいご利用の環境を教えてください。

コメントにて補足いたします。

動作確認ですが、

結果:

テスト

作成ファイル

test.txt

内容

テスト

以上となります。


URLデコードアプリ

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません