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にできますか? このコード スニペットを機能させる方法はありますか?