- ベストアンサー
「繝・せ繝・」となる文字化け
「テスト」を以下でデコードすると「繝・せ繝・」となってしまいます。 URL test.cgi/q_テスト/ $ENV{'PATH_INFO'}と「q_テスト」を使うことを前提として、「テスト」と正常に取る方法はありますでしょうか。 ご教授お願いします。 $buffer = $ENV{'PATH_INFO'}; $buffer = substr($buffer,1); @lens = split(/\//,$buffer); foreach $len(@lens){ ($name, $value) = split(/_/,$len,2); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/\t/ /g; $value =~ s/\n//g; $FORM{$name} = $value; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>実はURLエンコードしているのですが、 >そのURLをメールで送った場合、 >それをクリックするとアドレスが自動的に >日本語になってしまうため、 >このような問題が起こっています。 これを回避したいのであれば、ブラウザの知らない独自の変換方法を使用すれば大丈夫な気がします。 s/(.)/sprintf("%02.x",ord($1))/eg; 送るときこんな感じに変換して、 s/(..)/pack("C", hex($1))/eg; 受け取るときこんな感じにすれば問題ないのでは? この方法ならブラウザが勝手に文字コードを変換することもないだろうから、受け取るときに文字コードをきめうちにできるし。 (文字コードの誤認がない)
その他の回答 (2)
- leaz024
- ベストアンサー率75% (398/526)
> 「テスト」を以下でデコードすると「繝・せ繝・」となってしまいます。 ということは、「テスト」は「UTF-8」にエンコードされているということです。しかし、jcode.pl は UTF-8 に対応していないので、変わりに Jcode.pm か Encode.pm を使う必要があります。 もし、Perl のバージョンが 5.8.0 以上なら、標準モジュールの Encode.pm が使えます。それより前のバージョンなら、Jcode.pm を使ってください。 Jcode.pm についてはこちらを参照してください。 # Jcode.pm 作者のページ http://openlab.ring.gr.jp/Jcode/index-j.html # Jcode.pm の日本語ドキュメント http://perldoc.jp/docs/modules/Jcode-0.82/Jcode.pod Encode.pm についてはこちら。 # Encode - 文字コードの変換 http://search.cpan.org/~dankogai/Encode-1.99/Encode.pm # Encode::Guess - 文字コードの調査 http://search.cpan.org/~dankogai/Encode-1.99/lib/Encode/Guess.pm Encode を利用した例 ・スクリプトの先頭に下記を追加 use Encode qw/from_to/; use Encode::Guess qw/shiftjis euc-jp 7bit-jis utf8/; ・質問のコードの一部を変更 &jcode'convert(*value,'sjis'); ↓ my $enc = guess_encoding($value); if (ref $enc) { from_to($value, $enc->name, 'shiftjis'); } ※スクリプトの字下げに全角空白を使っているので、コピーする場合はタブなどに変換してください。 # Jcode は使ったことがないのでサンプルは書けませんが、ほとんど jcode.pl と同じ感覚で使えるようです。
- 参考URL:
- http://openlab.ring.gr.jp/Jcode/index-j.html,http://search.cpan.org/~dankogai/Encode-1.99/Encode.pm
お礼
なるほど。ありがとうございました!
- estea
- ベストアンサー率44% (39/87)
URLに日本語は使わないほうがいいと思われ。 日本語ドメインとかあったような気もするが・・・どっちにしてもねぇ。 どうしても引数で与えなきゃならん場合はURLエンコードすべきかと。 少なくとも当面は。
補足
ありがとうございます。 実はURLエンコードしているのですが、そのURLをメールで送った場合、それをクリックするとアドレスが自動的に日本語になってしまうため、このような問題が起こっています。 これはどうしようもないのでしょうか。。。
お礼
なるほど。ありがとうございました!