У меня есть текстовый файл в кодировке UTF-16. Каждая строка содержит количество столбцов, разделенных вкладками. Для тех, кому все равно, файл представляет собой плейлист TXT экспорта из iTunes. Столбец № 27 содержит имя файла.
Я читаю его, используя Perl 5.8.8 в Linux, используя код, подобный следующему:
binmode STDIN, ":encoding(UTF-16)";
while(<>)
{
chomp;
my @cols = split /\t/, $_;
my $filename = $cols[26]; # Column #27 contains the filename
print "File exists!" if (-e "$filename");
}
(Обратите внимание: я сократил этот фрагмент кода. В моем реальном коде я делаю некоторые замены, чтобы преобразовать абсолютное имя файла Windows, используемое iTunes, в имя файла, допустимое на моем Linux-компьютере)
Даже если файлы существуют, проверка файла (-e) не возвращает true. Я полагаю, что это как-то связано со строкой в UTF-16, но не могу понять, в чем проблема. Фактическое имя файла использует только символы ASCII. И имя файла печатается правильно, если я печатаю переменную $ filename.
Могут ли имена файлов в Perl быть в UTF16? Любые идеи, как заставить этот фрагмент кода работать?