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

标签 perl utf-8 plack

两个起点:

使用是否正确

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

最佳答案

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

关于perl - 使用 Plack 和 Middlewares 时将默认 perl 的 IO 切换为 utf-8 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012155/

相关文章:

python - 如何在 Flask python 中路由非 ascii URL

perl - 使用 Plack/PSGI/Poet 应用程序进行身份验证和/或 HTTPS

perl - 如何在 Perl 中以格式获取系统时钟?

从 Windows 批处理文件调用 Perl 脚本

python - Python 中的 UTF-8

java - 在java中将字符串从一种编码解释为另一种编码

perl - 如何将 Plack::Middleware::Session 与 Starman 服务器一起使用?

perl - 了解此 Plack 实现

perl - 在 Perl 中,如何在 'use strict' 打开时将 Tie::IxHash 与字典一起使用?

perl - 如果我的字符串包含 's///' ,我该如何使用 '/' ?