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

Posted

技术标签:

【中文标题】如何消除 TT 的“打印中的宽字符”警告?【英文标题】:How do I eliminate TT's "Wide character in print" warning? 【发布时间】:2011-01-28 22:32:06 【问题描述】:

每次我运行我的 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 => $ENVTEMPLATES_DIR,
       EVAL_PERL   => 1,

my $tt = Template->new(\%config); 

【问题讨论】:

【参考方案1】:

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

binmode STDOUT, ':utf8';

编辑:正如daxim 提到的,可以利用TT 的编码工具:

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

这依赖于广泛使用的约定,即'-' 文件名在打开以供读取时为您提供STDIN,在打开以供写入时提供STDOUT

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

【讨论】:

【参考方案2】:
$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 中有记录。

【讨论】:

以上是关于如何消除 TT 的“打印中的宽字符”警告?的主要内容,如果未能解决你的问题,请参考以下文章

如何消除间接呼叫 Method 在 Android Studio 中的编译警告

如何在 Swift 中消除警告?

c-free编译器总是出现一个警告,如何消除 warning:no newline at the end of file

如何最好地消除有关未使用变量的警告?

如何消除 GCC 中的外部库/第三方警告 [重复]

生成代码文档时如何消除意外缩进警告的原因?