저는 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.
나는 그것이 bin 파일 모드의 UTF8과 관련이있다 알고 있지만 나는 간단한 스크립트를 시도 할 경우에도 (여기를 보았다 : How can I output UTF-8 from Perl?) : Airth의 ÷들
이 내 전체 스크립트, 누군가가 나에게 설명 할 수 내가 갈거야 여기서
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' pragma는 여러분의 소스 코드가 utf8로 작성되었음을 Perl에게 알려줍니다. 데이터와 관련이 없습니다. – simbabque
출력을 어디에 인쇄하고 있습니까? 리눅스 쉘? 또한 파일을 어떻게 작성하고 있습니까? –
LANG이'en_GB.UTF-8'으로 설정되고 퍼티가 UTF-8로 설정된 상태에서 첫 번째 스 니펫이 Linux 쉘에서 잘 작동하는지 확인할 수 있습니다. 동일한 셸에서 VIM을 사용하여 파일을 만들었습니다. –