1

我使用 DBIx 类从数据库中选择数据;我使用序列化将响应从控制器发送到客户端,使用 jsonCatalyst::View::JSON

但是从数据库中选择的 utf8-data 需要从 utf-8 解码为 perl-string,然后才能像这样发送到客户端

use Encode;

...

sub get_fruits :Path('getfruits') :Args(0) {
    my $fruits = [$c->model('DB::Fruit')->search({})->hashref_array];
    # Hated encode data loop
    foreach (@$fruits) {
        $_->{name} = decode('utf8', $_->{name});
    }
    $c->stash({fruits => $fruits});
    $c->forward('View::JSON');
}

是否可以在视图中自动解码数据?

4

2 回答 2

2

Catalyst 模型始终必须确保数据被解码,无论它在哪里使用。视图必须确保数据被正确编码。您必须确保您的模型能够解码来自数据库的数据。如果您使用的是 DBIx::Class,请阅读Using Unicode

于 2013-04-19T09:25:09.973 回答
0

这可能就像确保 Catalyst::View::JSON 使用支持 UTF8 编码的 JSON 编码器一样简单。我相信如果您将 JSON::XS 与 Catalyst::View::JSON 一起使用,它将默认执行 UTF8 编码。您可以使用 json_driver 配置变量确保 Catalyst::View::JSON 正在使用 JSON::XS。

或者,您可以覆盖 Catalyst::View::JSON 中的 JSON 编码,详见文档

于 2013-04-19T09:18:33.583 回答