Perl 如何消除TT';s";“印刷中的宽字符”;警告

Perl 如何消除TT';s";“印刷中的宽字符”;警告,perl,unicode,template-toolkit,Perl,Unicode,Template Toolkit,每次运行CGI脚本时都会出现此警告(输出由Template::Toolkit呈现): 在/usr/local/lib/perl5/site\u perl/5.8.9/mach/Template.pm第163行打印宽字符。 消除它的正确方法是什么 我使用以下配置创建tt对象: my %config = ( ENCODING => 'utf8', INCLUDE_PATH => $ENV{TEMPLATES_DIR}, EVAL_PERL

每次运行CGI脚本时都会出现此警告(输出由Template::Toolkit呈现):

在/usr/local/lib/perl5/site\u perl/5.8.9/mach/Template.pm第163行打印宽字符。

消除它的正确方法是什么

我使用以下配置创建tt对象:

my %config = (
       ENCODING     => 'utf8',
       INCLUDE_PATH => $ENV{TEMPLATES_DIR},
       EVAL_PERL   => 1,
}
my $tt = Template->new(\%config); 

将其放在调用
$tt->process()
之前,以对输出进行自动编码:

binmode STDOUT, ':utf8';
编辑:如上所述,可以利用TT的编码功能:

$tt->process($infile, $vars, '-', { binmode => ':utf8' })
这依赖于广泛使用的约定,
'-'
文件名在打开读取时为您提供
STDIN
,在打开写入时为您提供
STDOUT

编辑2:顺便说一句,在mod_perl(2.0.5)下,后一种方法似乎不适用于我

这在中有记录

$tt->process($infile, $vars, $outfile, { binmode => ':encoding(UTF-8)' })