使用Plack和Middlewares时,将默认perl的IO切换为utf-8是正确的吗?

caj*_*ine 6 perl utf-8 plack

两个起点:

使用是否正确

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编译指示

Leo*_*erd 2

您确实不想在 Plack 上默认将STDIN/STDOUT设置为 UTF-8 模式,因为您不知道它们是否是二进制数据传输。例如,如果这些文件句柄是 FastCGI 协议连接器,它们将携带编码的二进制结构而不是 UTF-8 文本。因此,它们不得定义编码层,否则这些二进制结构将被破坏或被视为无效而被拒绝。