我已经知道如何使用如下代码将文件的非 utf8 编码内容逐行转换为 UTF-8 编码:
# outfile.txt is in GB-2312 encode
open my $filter,"<",'c:/outfile.txt';
while(<$filter>){
#convert each line of outfile.txt to UTF-8 encoding
$_ = Encode::decode("gb2312", $_);
...}
但我认为 Perl 可以直接将整个输入文件编码为 UTF-8 格式,所以我尝试了类似的方法
#outfile.txt is in GB-2312 encode
open my $filter,"<:utf8",'c:/outfile.txt';
(Perl 说类似 "utf8 "\xD4" does not map to Unicode" )
and
open my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
(Perl 说“readline() 在未打开的文件句柄上!)
他们不工作。但是有没有办法直接将输入文件转换为UTF-8编码呢?
Update:
看来事情并没有我想象的那么简单。我现在可以以迂回方式将输入文件转换为 UTF-8 代码。我首先打开输入文件,然后将其内容编码为UTF-8,然后输出到一个新文件,然后打开新文件进行进一步处理。这是代码:
open my $filter,'<:encoding(gb2312)','c:/outfile.txt';
open my $filter_new, '+>:utf8', 'c:/outfile_new.txt';
print $filter_new $_ while <$filter>;
while (<$filter_new>){
...
}
但这工作量太大,甚至比简单地逐行编码 $filter 的内容还要麻烦。