我有一个以UTF-16编码的文本文件,每一行包含由制表符分隔的多个列。对于那些关心的人来说,该文件是iTunes的播放列表TXT导出。第27列包含文件名。
我正在Linux中使用Perl 5.8.8读取它,类似于以下代码:
请注意:我已经缩短了这段代码片段。在我的实际代码中,我进行了一些替换,将iTunes使用的绝对Windows文件名转换为在我的Linux框中有效的文件名。
尽管文件存在,但(-e)文件测试未返回true。我认为这与字符串是UTF-16有关,但无法找出问题所在。实际的文件名仅使用ASCII字符。如果打印$filename变量,则文件名会正确打印。
Perl中的文件名可以是UTF16吗?有什么想法可以使这个代码片段工作吗?
我正在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吗?有什么想法可以使这个代码片段工作吗?
my $filename =~ $cols[26];
是什么意思? - Sinan Ünür