6

两个出发点:

使用是否正确

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 编写应用程序的唯一正确方法,在打开时显式编码/解码,所以没有openpragma

4

2 回答 2

2

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

于 2012-06-13T17:41:21.757 回答
-2

在现代 GNU/Linux 系统上,您应该在全局范围内完全切换到 UTF-8。这意味着设置

LANG="xx_YY.UTF-8"
PERL_UNICODE=SDAL
PERL5OPT=-Mutf8

在您的/etc/environment/etc/sysconfig/i18n/etc/default/locale或您的系统配置文件中。由于RHEL/Centos 错误,我符号链接/etc/environmentsysconfig/i18n.

依赖二进制输入的脚本应设置binmode为 STDIN/OUT/ERR(?) 或use openpragma 或应使用-C0选项调用。

问题是某些DBD驱动程序有问题,例如DBD::JDBC,您必须手动设置 utf8 标志。

use Encode qw/_utf8_on/;
map { _utf8_on $_; } @strings;
于 2014-08-13T09:10:56.090 回答