Решние таки придумалось:
# from html form on the utf8 page
# $fields->{some_param} = $IN{some_param};
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
foreach my $k (%{$fields}) {
utf8::decode($fields->{$k}); ### Here is the magic
}
my $response = $ua->post($url,$fields);
my $r = $response->content();
Однако как-то это неправильно, сначала делать декодирование, чтобы потом
сделать кодирование, чтобы на выходе таки получить bytes, которые были
сразу. Как это решается правильно? И почему вообще LWP считает, что у
меня где-то юникодные строчки, если у них нет флага utf8?
19.06.2011 2:12, Nick Knutov пишет:
Подтолкните пожалуйста в правильном направлении -
Dancer, скрипт, везде UTF8, включая use utf8.
Надо к одному внешнему апи сделать POST запрос с данными в koi8.
Данные приходят с формы в utf8. Я их конверчу через encode, убедился,
что флага utf8 там больше нет. И всё бы прекрасно, но судя по доступному
дебагу от удалённого апи запросы к нему приходят дважды кодированные,
как буд-то LWP думает, что все поля пост запроса у меня в utf. Я
сохраняю дампы данных непосредственно перед $ua->request(POST $url,
$fields);, т.е. я абсолютно уверен, что не сам делаю двойное
кодирование. Воткнуть no utf8 в блок вокруг LWP не помогло. Гугл тоже не
помогает. В какую сторону смотреть?
ps: в очень старой версии этого же скрипта, где входные данные в cp1251
и точно так же этим же самым кодом конвертятся в koi8, всё доходит до
чужого апи как надо и апи дает ожидаемые ответы, вместо ошибок.
--
Best Regards,
Nick Knutov
http://knutov.com
ICQ: 272873706
Voice: +7-904-84-23-130
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org