如何消除TT的“宽字符打印”警告?

时间:2010-03-18 09:09:04

标签: perl unicode template-toolkit

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

Wide character in print at /usr/local/lib/perl5/site_perl/5.8.9/mach/Template.pm line 163.

消除它的正确方法是什么?

我使用此配置创建tt对象:

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

2 个答案:

答案 0 :(得分:8)

在调用$tt->process()之前将其设置为自动编码输出:

binmode STDOUT, ':utf8';

修改:提到daxim,可以使用TT的编码工具:

$tt->process($infile, $vars, '-', { binmode => ':utf8' })

这依赖于广泛使用的约定,'-'文件名在打开阅读时为您提供STDIN,在打开文字时为STDOUT提供{{1}}。

编辑2 :BTW,后一种方式在mod_perl(2.0.5)下对我来说似乎不起作用。

答案 1 :(得分:1)

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

http://search.cpan.org/perldoc?Template#process%28%24template%2C_%5C%25vars%2C_%24output%2C_%25options%29中记录了这一点。