私はcsvファイルに基づいて画像を一括して名前を変更してコピーするスクリプトを作成しています。 csvは、列1:古い名前と列2:新しい名前で構成されます。私はcsvファイルをperlスクリプトの入力として使用して古い名前をチェックし、新しい名前を使って新しいフォルダにコピーを作成します。 (私が思う)問題は、画像と関係があります。私は、スクリプトを実行すると、彼らはßなどのようなUTF8文字が含まれているそれは、このプリントアウト:それはBarfußgässchenあるべきBarfu├ƒg├ñsschenと、次のエラー:csvファイルを使用してutf8の名前で画像をコピー/名前を変更します
Unsuccessful stat on filename containing newline at C:/Perl64/lib/File/Copy.pm line 148, <$INFILE> line 1.
Copy failed: No such file or directory at X:\Script directory\correction.pl line 26, <$INFILE> line 1.
は、私はそれがBINMODEのUTF8に関係しています知っているが、私は簡単なスクリプトを試してみても、(ここではそれを見た:How can I output UTF-8 from Perl?):エアース÷sが
これは私のスクリプト全体で、誰かが私に説明することができ、私は行くよどこ:
use strict;
use utf8;
my $str = 'Çirçös';
binmode(STDOUT, ":utf8");
print "$str\n";
それはこのプリントアウト違う? (私はものをテストしていたのでコードの最もクリーンではない)。
use strict;
use warnings;
use File::Copy;
use utf8;
my $inputfile = shift || die "give input!\n";
#my $outputfile = shift || die "Give output!\n";
open my $INFILE, '<', $inputfile or die "In use/not found :$!\n";
#open my $OUTFILE, '>', $outputfile or die "In use/not found :$!\n";
binmode($INFILE, ":encoding(utf8)");
#binmode($OUTFILE, ":encoding(utf8)");
while (<$INFILE>) {
s/"//g;
my @elements = split /;/, $_;
my $old = $elements[1];
my $new = "new/$elements[3]";
binmode STDOUT, ':utf8';
print "$old | $new\n";
copy("$old","$new") or die "Copy failed: $!";
#copy("Copy.pm",\*STDOUT);
# my $output_line = join(";", @elements);
# print $OUTFILE $output_line;
#print "\n"
}
close $INFILE;
#close $OUTFILE;
exit 0;
最初のスニペットについて:.plファイル自体がutf8でエンコードされていますか? 'use utf8'プラグマはあなたのソースコードがutf8で書かれていることをPerlに伝えます。データには関係しません。 – simbabque
出力先はどこに印刷されていますか? Linuxシェル?また、どのようにファイルを作成していますか? –
LANGが 'en_GB.UTF-8'に設定され、パテがUTF-8に設定された状態で、Linuxシェルで最初のスニペットが正常に動作することを確認できます。同じシェルにVIMを使ってファイルを作成しました。 –