У меня есть текстовый файл в кодировке 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) файла не возвращает истину. Я считаю, что это как-то связано со строкой в UTF-16, но не могу понять, в чем проблема. В фактическом имени файла используются только символы ASCII. И имя файла печатается правильно, если я печатаю переменную $ filename.
Могут ли имена файлов в Perl быть в UTF16? Есть идеи, как заставить этот фрагмент кода работать?
my $filename =~ $cols[26];
? - person Sinan Ünür   schedule 23.08.2009