解码JSON字符串在Mojolicious是用JSON.stringify编码
Decode JSON string in Mojolicious that was encoded with JSON.stringify
我正试图将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 style解决方案如下: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字符串
打印时会出现宽字符警告。这不是由于您解码unicode的方式,而是由于您的STDOUT编码。试试CPAN中可用的use utf8::all
,它会将所有IO句柄设置为utf8。避免解码可能并不能解决问题,反而会使问题变得更糟。它看起来工作的唯一原因是您的终端正在为您解决问题。
通过转义有问题的字符,至少可以减轻一些痛苦;参见https://stackoverflow.com/a/4901205/17389。
相关文章:
- 为什么JSON.stringify没有序列化原型值
- 尝试JSON.stringify Ember模型时Id丢失
- MVC C#从jQuery和JSON.stringify创建的cookie中读取值
- JSON.stringify和Object.keys在同一个对象上产生不同的结果
- JSON.stringify没有'在更改的对象上无法按预期工作.如何处理
- JSON.stringify正在忽略我的嵌套对象
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- 正在从JSON.stringify中提取数据
- JSON.stringify抛出RangeError:大型对象的字符串长度无效
- 你如何JSON.stringify一个ES6地图
- 在这种使用 JSON.stringify() 时有什么区别
- JavaScript 中的 JSON.stringify () 错误
- 在什么情况下,应该.deep.equal失败,但使用JSON.stringify进行比较工作正常
- 如何使用替换器 param json.stringify 访问嵌套对象
- 使用 jQuery.map 后使用 JSON.stringify 的问题
- JSON.stringify未序列化可枚举属性
- JSON.stringify没有序列化对象
- nodejs:请求jsmultipart二级文件和JSON.stringify
- JSON.Stringify replacer函数无法获取键值
- Javascript:JSON.stringify未按预期工作