似乎模板工具包没有正确处理编码。
我传递template->process
了一个文件名(从哪里获取模板)、一个哈希引用(包含所有参数)和一个标量引用(将输出放在哪里),然后我将其返回并依次显示给用户。
当我给它一个带有变音符号的字符串时,html输出包括一个黑色菱形,每个字母都用一个白色问号代替(但字母的数量是正确的)。任何其他角色都很好。
在调用 template->process 之前,我正在使用警告打印出字符串,此时它很好,据我所知,在template->process
调用过程中事情变成了垃圾。
有任何想法吗?我试过使用ENCODING => "utf8"
as well ,binmode => ":utf8"
但对输出没有任何影响。
这是我的代码,去掉了一些脂肪,只是为了显示我对模板-> 进程的调用,请注意,如果我省略{binmode => 'utf8'}
它,它没有任何效果。
<put variables in hash referenced to by vars>
<print out variables in has referenced to by $var>
my $data;
$template->process( $self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error();
return $data;
已解决 嘿,谢谢你的回答,问题原来是模板进程完成后,我们在输出之前将字符串写入临时文件,所以我们还需要为文件设置binmode,代码现在看起来像:
<put variables in hash referenced to by vars>
<print out variables in has referenced to by $var>
my $data;
binmode( STDOUT, ":utf8" );
$template->process( $self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error();
return $data;
我感谢大家的时间:)