gpt4 book ai didi

perl - 如何检查 Perl 中是否存在 UTF-16 文件名?

转载 作者:行者123 更新时间:2023-12-04 22:53:22 24 4
gpt4 key购买 nike

我有一个用 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 吗?任何想法如何让这个代码片段工作?

最佳答案

UTF-16 文本由 :encoding 层处理。当它进入$_ ,没有办法说它曾经是 UTF-16。我不认为那是你的问题。

我的猜测是您的文件名中有一些空格(您在尝试打印时没有注意到)或者您不在您认为的目录中。

尝试

if (-e $filename) { print "File exists!" } 
else { print "File <$filename> not found" }

并仔细检查文件名。您也可以 use Cwd;并打印出当前目录。

关于perl - 如何检查 Perl 中是否存在 UTF-16 文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com