我正试图将Javascript变量作为JSON字符串发送到Mojolicious,并且在Perl方面解码时遇到了问题。我的页面使用utf-8编码。
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字符串的解码没有成功。当perl端没有需要解码的utf-8字符时,一切都正常工作,$routes
包含预期的数据。
:utf8
流处理,但从我在CPAN上看到的Mojo::JSON文档中,它似乎已经这样做了。如果可以的话,请尝试安装和使用来自CPAN的JSON模块;我使用它来解码UTF8编码的JSON数据取得了良好的结果。 - Aaron Miller$routes=JSON->new->utf8(0)->decode( $self->param('routes_jsonstr') );
- 410503$routes=JSON->new->utf8(0)->decode( $self->param('routes_jsonstr') );
。启用utf8(1)会出现错误Wide character in subroutine entry at /opt/mojo...
。我还在JavaScript中将$.get()替换为$.post(),但我认为这没有影响。 - 410503