两个出发点:
- 在他对为什么现代 Perl 默认避免使用 UTF-8 的回答中?tchrist 指出了确保在 Perl 中正确处理 Unicode 所需的 52 件事。答案显示了带有一些
use
语句的样板代码。关于使用 Unicode 的一个类似问题是如何使用现代 perl 和 utf8 默认设置“使用 My::defaults”? PSGI规范在设计上是面向字节的。我有责任对所有内容进行编码/解码,因此对于 Plack 应用程序,正确的方法是对输出进行编码和对输入进行解码,例如:
use Encode; my $app = sub { my $output = encode_utf8( myapp() ); return [ 200, [ 'Content-Type' =>'text/plain' ], [ $str ] ]; };
使用是否正确
use uni::perl; # or any similar
在 PSGI 应用程序和/或我的模块中?
uni::perl
将 Perl 的默认 IO 更改为 UTF-8,因此:
use open qw(:std :utf8);
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
这样做会破坏 Plack 或其中间件中的某些内容吗?或者是为 Plack 编写应用程序的唯一正确方法,在打开时显式编码/解码,所以没有open
pragma?