有点长的问题,因为 AFAIK Poet/Mason2 不是经常使用的框架 - 所以我试图详细说明。
两年前我问了一个问题如何让 Mason2 utf8 干净。据我所知,梅森/诗人在这个领域并不是什么新鲜事——不幸的是,今天我遇到了另一个问题。简单的测试用例:
$ poet new my #create new poet application
$ cd my
重写一些方法,允许在组件中使用 utf8:
添加./lib/My/Mason/Compilation.pm
override 'output_class_header' => sub {
return join("\n",
super(), qq(
use utf8;
use Encode qw(encode decode);
)
);
};
以上为每个编译的 Mason 组件添加了use utf8...
.
还需要对 Mason 的输出进行编码(Plack 需要字节),因此:./lib/My/Mason/Request.pm
override 'run' => sub {
my($self, $path, $args) = @_;
my $result = super();
$result->output( Encode::encode('UTF-8', $result->output()) );
return $result;
};
现在,可以创建一个组件page.mc
,例如具有以下内容:
% sub { uc($_[0]) } {{
a quick brown fox jumps over the lazy dog.
διαφυλάξτε γενικά τη ζωή σας από βαθειά ψυχικά τραύματα.
árvíztűrő tükörfúrógép.
dość gróźb fuzją, klnę, pych i małżeństw!
эх, чужак, общий съём цен шляп (юфть) – вдрызг!
kŕdeľ šťastných ďatľov učí pri ústí váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso.
zwölf boxkämpfer jagen viktor quer über den großen sylter deich.
% }}
运行诗人应用程序后,bin/run.pl
您可以转到:http://0:5000/page
并将获得正确的内容。
一只快速的棕色狐狸跳过懒惰的狗。ΔΙΑΦΥΛΆΞΤΕ ΓΕΝΙΚΆ ΤΗ ZΩΉ ΣΑΣ ΑΠΌ ΒΑΘΕΙΆ ΨΥΧΙΚΆ ΤΡΑΎΜΑΤΑ。ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP。DOŚĆ GRÓŹB FUZJĄ,KLNĘ,PYCH 我 MAŁŻEŃSTW!ЭХ, ЧУЖАК, ОБЩИЙ СЪЁМ ЦЕН ШЛЯП (ЮФТЬ) – ВДРЫЗГ!KŔDEĽ ŠŤASTNÝCH ĎATĽOV UČÍ PRI ÚSTÍ VÁHU MĹKVEHO KOŇA OBHRÝZAŤ KÔRU A ŽRAŤ ČERSTVÉ MÄSO。ZWÖLF BOXKÄMPFER JAGEN VIKTOR QUER ÜBER DEN GROSSEN SYLTER DEICH。
但是当创建另一个组件时,说go.mc
一个内容
% $m->go('/page');
内部重定向(go
方法)有些混乱的内容,并会产生:
一只快速的棕色狐狸跳过懒惰的狗。ÎÎÎΦΥÎÎÎΤΠÎÎÎÎÎÎΠΤΠÎΩΠΣÎΣ ÎÎ Î ÎÎÎÎÎÎΠΨΥΧÎÎΠΤΡ ÃRVÃZTÅ°RÅ TÃKÃRFÃRÃGÃP。DOÅÄ GRÃŹB FUZJÄ, KLNÄ, PYCH I MAÅÅ»EÅSTW!ÐÐ¥, ЧУÐÐÐ, ÐЩÐРС¡¡ KÅDEĽ ŠŤASTNÃCH ÄATĽOV UÄà PRI ÃSTà VÃHU MĹKVEHO KOÅA OBHRÃZAŤ KÃRU A ŽRAŤ ÄERSTVà MÃSO。ZWÃLF BOXKÃMPFER JAGEN VIKTOR QUER ÃBER DEN GROSSEN SYLTER DEICH。
奇怪,$m->visit()
工作正常。所以,在 Poet/Mason 的某个地方需要做一些事情来获得该go
方法的正确输出。
有人可以帮忙吗?