我已经知道如何逐行将非UTF-8编码的文件内容转换为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"无法映射到Unicode")
以及
open my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
(Perl提示“readline() on unopened filehandle!”)
它们无法工作。但是否有一种直接将输入文件转换为UTF-8编码的方法?
更新:
看起来事情并不像我想象的那么简单。现在,我可以用迂回的方式将输入文件转换为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的内容还要麻烦。