OT: Verständnisfrage zu Umlauten in Dateinamen in Perl
Hallo zusammen, Ein gesundes neues 2012 wünsche ich Euch allen noch. (Es ist ja noch deutlich vor'm nächsten ;-) ) Ich hoffe Ihr könnt mir bei folgendem Problem einen Tipp geben: Ich versuchen in Perl Dateien mit Umlauten in Namen zu kopieren und verstehe nicht wieso das nicht (so einfach) funktioniert. Die Dateien wurden auf Win7 angelegt und ich habe sie von einer USB Disk auf mein Opensuse 11.4 System kopiert. Im xterm und in Dolphin werden die Namen korrekt mit den Umlauten angezeigt. (Ich weiss, dass Sonderzeichen in Dateinamen Probleme machen, aber bevor ich sie Umbenenne, möchte ich doch mein Problem verstehen) In Perl mache ich (etwas vereinfacht): my @list = glob("$dir/*.jpg"); : my %objects = {}; foreach my $name (@list) { my $ziel = ... $objects{"$name"} = $ziel; } : : foreach my $srcObject (sort keys %objects) { my $cpresult = `cp "$srcObject" "$destObject" 2>&1`; chomp $cpresult; # oder auch my $status = copy("$srcObject", "$destObject"); } ($srcObject = "Küste-Wanderung-1.jpg") Bei "cp "$srcObject" ..." meckert er, dass er das $srcObject nicht findet, wobei "Küste" als "Küste" angezeigt wird, bei "copy()" schaut das kopierte Zielobjekt dann so aus. Ich denke das dass mit ISO bzw. UTF8 zusammenhängt, aber ich hätte nicht erwartet, dass wenn ich auf einem UTF8 System mit glob() (oder auch mit @liste = `ls ...`) etwas in ein Array einlese, dann den String in ein Hash kopiere und dann kopieren will sich an dem String etwas ändert. Bekommt der Copy-Befehl den String in den falschen Hals ? Danke für erhellendes. Opensuse 11.4 64bit KDE 4.7 echo $LANG: de_DE.UTF-8 Perl aus den normalen OS Repros Grüsse Werner Franke
Hallo Am 05.01.2012 09:05, schrieb Werner Franke:
Hallo zusammen,
Ein gesundes neues 2012 wünsche ich Euch allen noch. (Es ist ja noch deutlich vor'm nächsten ;-) ) Danke. gleichfalls..! :-) Ich hoffe Ihr könnt mir bei folgendem Problem einen Tipp geben:
Ich versuchen in Perl Dateien mit Umlauten in Namen zu kopieren und verstehe nicht wieso das nicht (so einfach) funktioniert.
Die Dateien wurden auf Win7 angelegt und ich habe sie von einer USB Disk auf mein Opensuse 11.4 System kopiert. Im xterm und in Dolphin werden die Namen korrekt mit den Umlauten angezeigt. (Ich weiss, dass Sonderzeichen in Dateinamen Probleme machen, aber bevor ich sie Umbenenne, möchte ich doch mein Problem verstehen)
In Perl mache ich (etwas vereinfacht):
my @list = glob("$dir/*.jpg"); : my %objects = {}; foreach my $name (@list) { my $ziel = ... $objects{"$name"} = $ziel; } : : foreach my $srcObject (sort keys %objects) { my $cpresult = `cp "$srcObject" "$destObject" 2>&1`; chomp $cpresult; # oder auch my $status = copy("$srcObject", "$destObject"); }
($srcObject = "Küste-Wanderung-1.jpg") Was passiert wenn du in PERL das UTF-8 pragma setzt? "usr utf-8;" (Siehe http://perldoc.perl.org/utf8.html) Bin kein grosser PERL Spezialist, aber das hat mit bei solchen Probs immer wieder mal geholfen. Vielleicht klappts auch bei dir? Bei "cp "$srcObject" ..." meckert er, dass er das $srcObject nicht findet, wobei "Küste" als "Küste" angezeigt wird, bei "copy()" schaut das kopierte Zielobjekt dann so aus.
Ich denke das dass mit ISO bzw. UTF8 zusammenhängt, aber ich hätte nicht erwartet, dass wenn ich auf einem UTF8 System mit glob() (oder auch mit @liste = `ls ...`) etwas in ein Array einlese, dann den String in ein Hash kopiere und dann kopieren will sich an dem String etwas ändert. Bekommt der Copy-Befehl den String in den falschen Hals ?
Danke für erhellendes.
Opensuse 11.4 64bit KDE 4.7 echo $LANG: de_DE.UTF-8 Perl aus den normalen OS Repros
Grüsse Werner Franke
--Tom -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hi Tom, Am 05.01.2012 09:17, schrieb "T. Bühlmann": [...]
In Perl mache ich (etwas vereinfacht):
my @list = glob("$dir/*.jpg"); : my %objects = {}; foreach my $name (@list) { my $ziel = ... $objects{"$name"} = $ziel; } : : foreach my $srcObject (sort keys %objects) { my $cpresult = `cp "$srcObject" "$destObject" 2>&1`; chomp $cpresult; # oder auch my $status = copy("$srcObject", "$destObject"); }
($srcObject = "Küste-Wanderung-1.jpg")
Was passiert wenn du in PERL das UTF-8 pragma setzt? "usr utf-8;" (Siehe http://perldoc.perl.org/utf8.html) Bin kein grosser PERL Spezialist, aber das hat mit bei solchen Probs immer wieder mal geholfen. Vielleicht klappts auch bei dir?
Danke für die Antwort. Auf diese Seite bin ich auch gestossen. Wenn ich "use utf-8;" mit reinnehme, dann mag auch copy("$srcObject", "$destObject") nicht kopieren. Ich bekomme dann auch hier die gleiche Fehlermeldung wie bei `cp $srcObject...`. Ich hoffe, dass mir ein Perl Spezialist mehr sagen kann, was da in den Eingeweiden so passiert und wo ich eingreifen muss/kann. Danke und Gruss Werner
Hallo Werner, Werner Franke schrieb (05.01.2012 10:08 Uhr):
Am 05.01.2012 09:17, schrieb "T. Bühlmann": [...]
Was passiert wenn du in PERL das UTF-8 pragma setzt? "usr utf-8;" (Siehe http://perldoc.perl.org/utf8.html) Bin kein grosser PERL Spezialist, aber das hat mit bei solchen Probs immer wieder mal geholfen. Vielleicht klappts auch bei dir?
Danke für die Antwort. Auf diese Seite bin ich auch gestossen. Wenn ich "use utf-8;" mit reinnehme, dann mag auch copy("$srcObject", "$destObject") nicht kopieren. Ich bekomme dann auch hier die gleiche Fehlermeldung wie bei `cp $srcObject...`. Da steht "utf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code" dann kannst du Mehrbytezeichen in den Code schreiben, das willst du aber gar nicht.
Ich hoffe, dass mir ein Perl Spezialist mehr sagen kann, was da in den Eingeweiden so passiert und wo ich eingreifen muss/kann. Versucht mal binmode STDOUT, "utf-8"; http://perldoc.perl.org/functions/binmode.html Bin mir aber nicht sicher, ob das bei copy hilft.
Ansonsten gibt es ja noch opensuse-programming-de@opensuse.org Marc -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (3)
-
"T. Bühlmann"
-
Marc Patermann
-
Werner Franke