HTTP::Request::Commonでsjisをエスケープしたパラメータにゴミが入る

解決

tokuhiromさんのコメント参照。

name => "北海道";

'name' => "北海道";

とクオートしたら期待通りに動きました。
ありがとうございます。

use strict;
use warnings;
use utf8;
use Encode;
use HTTP::Request::Common;

my $name = "北海道";
$name = encode('shift_jis', $name);
my $req = POST 'http://ido.nu/kuma/pref', [
    name => $name
];
print $req->as_string;

こういうコードでクエリで送る文字列をsjisでエスケープされたものにしたかったんだけどうまく行かないので表示させてみたら

POST http://ido.nu/kuma/pref
Content-Length: 31
Content-Type: application/x-www-form-urlencoded

name=%C2%96k%C2%8AC%C2%93%C2%B9

%96k%8AC%93%B9になるべきところに%C2がやたら混じっていて文字が壊れている。

use bytesで囲めば直る。

{
  use bytes;

  my $req = POST 'http://ido.nu/kuma/pref', [
      name => $name
  ];
  print $req->as_string;
}

でももとのコードでなんでうまくいかないのか分からない。


About this entry