hallo
Hallo beatovich,
ah. Gerade doch mal geguckt: ISO 8859-1 definiert an Stelle \x80 kein Eurozeichen. Deswegen codiert encode da auch %C2%80 hin das ist UTF-8 für \x80. ISO 8859-1 ist von `99, das ist zu alt. Es gibt ein Update, ISO 8859-15, da ist das € Zeichen auf \xa5. Aber das ist nicht Windows.
Ich muss Dir also gelegentlich 0,05€ überweisen - meine Wette lag falsch. Windows versorgt dein Perl mit Verzeichnisinformationen im CP1252 Format - was eigentlich kacke ist weil Du damit nicht beliebige Dateinamen verarbeiten kannst. Schöner wär's wenn gleich UTF-8 oder zumindest UTF-16 ankäme (Windows Wide Character Format).
D.h. dein Script wird vermutlich unter Linux nicht laufen. Oder liefert readdir da auch ein CP1252 Encoding?
Ich vermute ich kann das Encoding zwar so angeben. Das Resultat wird einfach minimal verschieden sein.
UTF-16 kann im übrigen nicht verwendet werden, da hier von decode() zwingend eine BOM erwartet wird, die es für Dateinamen aber nicht gibt.
Ich definiere derzeit einfach eine Config-Variable
my $FILESYSENCODING = "CP1252"; #betrifft Dateinamen
Auf Unix müsste man die dann halt anpassen
Wenn's um Datei schreiben geht, schreibe ich sichere Zeichen vor. Im Editor soll man aber auch Dateien mit unsicheren Namen lesen und unter neuem Namen speichern können.