3

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
            }
        );

パールコード:

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、期待されるデータが含まれます。

4

3 に答える 3

1

問題のある文字をエスケープすることで、少なくとも痛みの一部を取り除くことができます。https://stackoverflow.com/a/4901205/17389を参照してください。

于 2013-05-01T04:10:33.323 に答える