JavascriptでURLエンコードした文字列をperlでデコードする

Ajaxで日本語文字列パラメータに含んで、サーバとやり取りする場合、日本語文字列はURLエンコードする必要があります。
これは、サーバ側のCGI(perl)だと、CGI.pmは自動的にデコードしてくれないので、Jcodeを使ってデコードします。


use Jcode;

・・・

sub utf_unescape
{
my ($str) = @_;
$str =~ tr/+/ /;
$str =~ s/%u([0-9A-Fa-f]{4})/Jcode->new(pack("H4",$1), "ucs2")->sjis/eg;
$str;
}

これはsjisの例です。ブラウザによっては、JavascriptUTF-16エンコードしないものがあるようですが、その場合はCGI.pmがすでにデコードしてくれています。