Я уже знаю, как преобразовывать не-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 "не отображается на Unicode")
и
open my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
(Perl говорит "readline () на неоткрытом дескрипторе файла!)
Они не работают. Но есть ли способ напрямую преобразовать входной файл в кодировку 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 построчно.