两个起点:
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 ] ];
};
Run Code Online (Sandbox Code Playgroud)使用是否正确
use uni::perl; # or any similar
Run Code Online (Sandbox Code Playgroud)
在PSGI应用程序和/或我的模块中?
uni::perl 将Perl的默认IO更改为UTF-8,因此:
use open qw(:std :utf8);
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
Run Code Online (Sandbox Code Playgroud)
这样做会破坏Plack或其中间件吗?或者是在开放时明确编写/解码Plack的应用程序的唯一正确方法,所以没有open编译指示?
您确实不想在 Plack 上默认将STDIN/STDOUT设置为 UTF-8 模式,因为您不知道它们是否是二进制数据传输。例如,如果这些文件句柄是 FastCGI 协议连接器,它们将携带编码的二进制结构而不是 UTF-8 文本。因此,它们不得定义编码层,否则这些二进制结构将被破坏或被视为无效而被拒绝。