我有一個以UTF-16編碼的文本文件。每行包含多個由製表符分隔的列。對於那些關心,該文件是從iTunes導出的播放列表TXT。列#27包含一個文件名。如何檢查Perl中是否存在UTF-16文件名?
我使用類似的代碼在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");
}
(請注意:我已經縮短這個代碼片斷在我實際的代碼中,我做了一些換人轉換。絕對windows文件名由iTunes用於在我的Linux機器上有效的文件名)
即使文件存在,(-e)文件測試也不會返回true。我相信它與UTF-16中的字符串有關,但無法弄清楚問題所在。實際的文件名只使用ASCII字符。如果我打印$ filename變量,文件名打印正確。
Perl中的文件名可以使用UTF16嗎?任何想法如何讓這段代碼片段工作?
在我花費任何時間之前,什麼是'my $ filename =〜$ cols [26];'? – 2009-08-22 20:15:54
抱歉 - 錯字。應該是=在StackOverflow錯字,而不是我原來的代碼。問題依然存在。 – blt04 2009-08-22 20:17:22
文件名本身不能是UTF-16,因爲UTF-16填滿了零字節。現在許多Linux發行版正在使用UTF-8,所以這將是第一個嘗試的編碼。 – bobince 2009-08-22 20:46:47