Perl5.8.4です。「use encoding・・・」を使ったプログラムで、URLエンコード(URLエスケープ)したい箇所があるのですが、どうしてもうまくいきません。

例えば下のプログラムでは「あいう」をURLエンコードしているつもりでも表示されるのは「あいう」のままです。
「use encoding ’euc-jp’;」を消さずにURLエンコードされた文字を表示する方法がありましたらご教示ください。

---プログラム---
#!/usr/local/bin/perl
use encoding ’euc-jp’;
$a = ”あいう”;
#$aをURLエンコード
$a =~ s/([^¥w ])/’%’ . unpack(’H2’, $1)/eg;
$a =~ tr/ /+/;
print ”Content-Type: text/html¥n¥n”;
print $a;
exit;
---プログラムここまで---
--> 結果
あいう
と表示されます

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/17 19:27:54
  • 終了:--

回答(1件)

id:tociyuki No.1

水谷敏行回答回数12ベストアンサー獲得回数12005/09/17 21:17:38

ポイント80pt

http://search.cpan.org/~dankogai/Encode-2.12/Encode.pm

Encode - character encodings - search.cpan.org

use encoding ’euc-jp’;

use Encode qw(encode);

$a = ”あいう”;

$a = encode(’euc-jp’, $a);

$a =~ s/([^¥w ])/’%’. unpack(’H2’, $1)/eg;

以下略

use encoding ’euc-jp’;

use Jcode;

$a = ”あいう”;

$a = Jcode->new( $a )->euc;

$a =~ s/([^¥w ])/’%’. unpack(’H2’, $1)/eg;

以下略

http://search.cpan.org/~dankogai/Encode-2.12/encoding.pm

encoding - allows you to write your script in non-ascii or non-utf8 - search.cpan.org

理由:

use encoding ’euc-jp’;

を指定すると、実行時に$a = ”あいう”;でスカラー$aにUCSワイドキャラクタ

が格納されます。

質問の意図は、おそらくEUC-JPでURLエンコードしたいという意味でしょうから

$aの内容をマルチバイトのEUC-JPに変換しないといけません。

ワイドキャラクタからマルチバイトへの変換には、

Encodeか、それのOOPラッパーのJcodeを使います。

# UTF-8の場合もマルチバイトに変換しなければなりません。

id:ponavi

大変よく分かりました。

ありがとうございます!

2005/09/17 21:22:00

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません