gpt4 book ai didi

javascript - 在 Mojolicious 中解码使用 JSON.stringify 编码的 JSON 字符串

转载 作者:行者123 更新时间:2023-11-29 17:17:18 24 4
gpt4 key购买 nike

我正在尝试将 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 包含预期数据。

最佳答案

Mojolicious 风格的解决方案可以在这里找到: http://showmetheco.de/articles/2010/10/how-to-avoid-unicode-pitfalls-in-mojolicious.html

在 Javascript 中,我只将 $.get() 更改为 $.post()。更新和工作的 Perl 代码现在看起来像这样:

use Mojo::ByteStream 'b';
sub on_route_change {
my $self = shift;
my $routes=j( b( $self->param('routes_jsonstr') )->encode('UTF-8') );
}

使用许多不同的 utf8 字符串进行测试。

关于javascript - 在 Mojolicious 中解码使用 JSON.stringify 编码的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com