我有一个以 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");
}
(请注意:我已经缩短了这个代码片段。在我的实际代码中,我做了一些替换,将 iTunes 使用的绝对 Windows 文件名转换为在我的 Linux 机器上有效的文件名)
即使文件存在,(-e) 文件测试也不返回 true。我相信这与 UTF-16 中的字符串有关,但无法弄清楚问题所在。实际文件名仅使用 ASCII 字符。如果我打印 $filename 变量,文件名会正确打印。
Perl 中的文件名可以是 UTF16 吗?任何想法如何让这个代码片段工作?