小编blt*_*t04的帖子

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

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

perl utf-16

4
推荐指数
1
解决办法
775
查看次数

标签 统计

perl ×1

utf-16 ×1