加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:23:04 所属栏目:大数据 来源:网络整理
导读:我有一个用UTF-16编码的文本文件.每行包含由制表符分隔的多个列.对于那些关心的人,该文件是从iTunes导出的播放列表TXT.第27列包含文件名. 我在Linux中使用Perl 5.8.8使用类似的代码来阅读它: binmode STDIN,":encoding(UTF-16)";while(){ chomp; my @cols =
我有一个用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" }

并仔细检查文件名.你也可以使用Cwd;并打印出当前目录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读