我有一个用UTF-16编码的文本文件.每行包含由制表符分隔的多个列.对于那些关心的人,该文件是从iTunes导出的播放列表TXT.第27列包含文件名.
我在Linux中使用Perl 5.8.8使用类似的代码来阅读它:
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");
}
Run Code Online (Sandbox Code Playgroud)
(请注意:我已缩短此代码段.在我的实际代码中,我做了一些替换,将iTunes使用的绝对Windows文件名转换为在我的Linux机器上有效的文件名)
即使文件存在,( - e)文件测试也不会返回true.我认为这与UTF-16中的字符串有关,但无法弄清问题是什么.实际文件名仅使用ASCII字符.如果我打印$ filename变量,文件名将正确打印.
Perl中的文件名可以是UTF16吗?有任何想法如何让这段代码片段工作?