我正在尝试在 perl 5.8 中生成一个文件,该文件从 xml 文件(具有 utf-8 编码)读取并生成一个 word 文档。当我在命令行运行代码时,它运行良好。
从 CGI::Application 运行相同的代码时,它会忽略 unicode 字符并错过注释。
这是代码:
$template->process("$dir/$input",$vars, \$content )
|| return "Template Error: " . $template->error();
open PBH, ">:encoding(UTF-8)", $doc_file or die $!;
print PBH $content;
close PBH;
我尝试设置 binmode 但问题似乎出在 CGI::Application 在写入文档文件时忽略了 utf 编码。
当作为 perl 脚本运行时,我有以下代码可以很好地生成具有正确法语口音的 word 文档。
Perl 脚本
#!/usr/local/bin/perl
use XYZ;
my $x = new XYZ();
$x->gen_pb();
1;
模块 XYZ 的代码如下:
package XYZ;
sub gen_pb {
$template->process("$dir/$input",$vars, \$content,
{binmode => ':encod +ing(utf8)'} ) || return "Template Error: " . $template->error(); unlink($doc_file) if(-e $doc_file);
open(FHPB,">$doc_file");
binmode( FHPB, ":encoding(UTF-8)" );
print FHPB $content; close FHPB;
}
但是当从 CGI 调用时,相同的模块会生成 word 文档,但没有法语口音。
Perl CGI 程序
#!/usr/local/bin/perl
use CGI::Application;
use XYZ;
....
my $x = new XYZ();
$x->gen_pb();