ネットで紹介されていた下記コードを実行すると、文字化けしてしまいます。
どうやら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);
テキストデータに、これを作成して、試してみてください。
当方の環境では正常に動作しました。
$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
内容
テスト
テキストデータに、これを作成して、試してみてください。
当方の環境では正常に動作しました。
$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
内容
テスト
ありがとうございます。完璧です!
すいません。環境について記載し忘れました。
↑テキストデータに、これを作成して、試してみてください。
当方の環境(ActivePerlv5.8.8,WinXpProSP3,Windows付属テキストエディターにて作成)では問題なく正常に動作しました。
これで正常に動作しない場合、詳しいご利用の環境を教えてください。
コメントにて補足いたします。
動作確認ですが、
結果:
テスト
作成ファイル
test.txt
内容
テスト
以上となります。
ありがとうございます。完璧です!