Я пытаюсь отправить переменную javascript как строку JSON в Mojolicious, и у меня возникают проблемы с расшифровкой ее на Perl-стороне. Моя страница использует кодировку utf-8.Декодировать строку JSON в Mojolicious, которая была закодирована с помощью JSON.stringify
Строка json (значение $self->param('routes_jsonstr')
), по-видимому, имеет правильное значение, но Mojo::JSON
не может ее декодировать. Код работает хорошо, когда нет символов utf-8. Что я делаю не так?
код Javascript:
var routes = [ {
addr1: 'Škofja Loka', // string with utf-8 character
addr2: 'Kranj'
}];
var routes_jsonstr = JSON.stringify(routes);
$.get(url.on_route_change,
{
routes_jsonstr: routes_jsonstr
}
);
Perl код:
sub on_route_change {
my $self = shift;
my $routes=j($self->param('routes_jsonstr'));
warn $self->param('routes_jsonstr');
warn Dumper $routes;
}
выход сервера
Wide character in warn at /opt/mojo/routes/script/../lib/Routes/Homepage.pm line 76.
[{"addr1":"Škofja Loka","addr2":"Kranj"}] at /opt/mojo/routes/script/../lib/Routes/Homepage.pm line 76.
$VAR1 = undef;
Последняя строка выше показывает, что декодирование JSon строки не работает. Когда нет utf-8 символов для декодирования на Perl-стороне, все работает нормально, а $routes
содержит ожидаемые данные.
Вам нужно будет применить дисциплину потока: utf8, где Mojo :: JSON получает свои значения параметров, но из того, что я вижу в документации Mojo :: JSON на CPAN, должно быть, должно быть, что. Если можно, попробуйте установить и использовать модуль JSON из CPAN; У меня были хорошие результаты с использованием для декодирования данных JSON, закодированных в utf8. –
'$ routes = JSON-> new-> utf8 (0) -> decode ($ self-> param ('routes_jsonstr'));' –
Можете ли вы сделать это с Mojo :: JSON или только с JSON.pm? –