[perl] Кодировка в путях к файлу
Скрипт считывает из файла полный путь к другому файлу. И открывает этот другой файл. В имени файла и пути может быть кириллица.
В windiws этот скрипт работает отлично, но при запуске из ubuntu пишет: Невозможно открыть файл: имя. И в имени файла вместо русских букв значки кружочек с вопросиком.
Пытался перекодировать строку, содержащую путь до файла в utf-8 с помощью:
Код:
if ($^O ne 'MSWin32') {$file_name=encode("utf8", $file_name);}
Теперь вместо кириллицы отображаются не вопросики в кружочках, а какие-то латинские буквы и знаки.
Подскажите как решить проблему. Хочется, чтобы скрипт успешно выполнялся и в windows и в ubuntu. (Изменять кодировку файла скрипта и файла, откуда считывается путь до файла нельзя)
Часть текста скрипта, связанная с ошибкой:
Код:
BEGIN {eval {require Encode; Encode->import();}; if ($@ ne '') {print "Can not connect the module Encode"; exit;}}
$file="mail.txt";
open $in, '<'."$file";
chomp(my $att_file=<$in>);
close $in;
if ($^O ne 'MSWin32') {$att_file=encode("utf8", $att_file);}
open (f, $att_file) or die "Can not open $att_file: $!";
close f;
$file="mail.txt";
open $in, '<'."$file";
chomp(my $att_file=<$in>);
close $in;
if ($^O ne 'MSWin32') {$att_file=encode("utf8", $att_file);}
open (f, $att_file) or die "Can not open $att_file: $!";
close f;
Я сам разобрался. Заменил соответствующую строку на: if ($^O ne 'MSWin32') {Encode::from_to($att_file, 'windows-1251', 'utf-8');}
Раньше у меня на эту функцию ошибка была, потому что я писал $att_fil=Encode::from_to($att_file, 'windows-1251', 'utf-8'); и в строке сохранялось число.