Thread Archive::Zip Umlaute auf Windows
(14 answers)
Opened by bianca at 2016-05-01 10:57
Guten Morgen!
Nun muss ich doch nochmal um Hilfe zum Archive::Zip bitten. Und zwar bekomme ich es trotz Verwendung von $Archive::Zip::UNICODE = 1 nicht hin, dass die Umlaute im ZIP korrekt sind. Hier ein Script zum testen. Bitte im selben Verzeichnis einen Ordner test_archive_broschüre und darin eine Datei mit Umlaut im Namen anlegen. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 #!/usr/bin/perl use strict; use warnings; use 5.010; ########################################################### # Def my @pfade = ("test_archive_broschüre"); # Quelle(n) my $ziel_zip = 'test.zip'; # Zieldatei ########################################################### # Pre say("\n\n\n".('-' x 80)."\ngeht los"); require Encode; require Archive::Zip; $Archive::Zip::UNICODE = 0; # Name "Archive::Zip::UNICODE" used only once... if ($^O =~ /mswin/i) { $Archive::Zip::UNICODE = 1; } Archive::Zip->setErrorHandler( sub { $_[0] =~ s/[ \r\n]$//g; say("FEHLER '$_[0]' mit caller '".join('*',caller)."'"); goto(ENDE); } ); say("Archive::Zip Version: ".(Archive::Zip->VERSION)); ########################################################### { # write ZIP my $zip = Archive::Zip->new(); while (scalar(@pfade)) { my $pfad = shift(@pfade); if (opendir(my $fh,$pfad)) { foreach my $file (sort {$a cmp $b} readdir($fh)) { next() if $file eq '.' || $file eq '..'; my $win_konsole; { # Gegenprobe my $roh = Encode::decode('iso-8859-1',$file); say "Roh: '$roh'"; $win_konsole = Encode::encode('cp850',$roh); say "Win: '$win_konsole'"; } if (-d "$pfad/$file") { push(@pfade,"$pfad/$file"); } else { say("add '$pfad/$file'"); my $file_member = $zip->addFile({ filename => "$pfad/$file", compressionLevel => Archive::Zip::COMPRESSION_LEVEL_FASTEST(), }); } } } } if (!-f $ziel_zip || unlink($ziel_zip)) { unless($zip->writeToFileNamed($ziel_zip) == Archive::Zip::AZ_OK()) { die("Fehler in ".__LINE__); } } else { die("Fehler in ".__LINE__); } } ########################################################### { # read ZIP my $zip = Archive::Zip->new(); if ($zip->read($ziel_zip) == Archive::Zip::AZ_OK()) { if (exists $zip->{members} && scalar(@{$zip->{members}})) { foreach my $ref (@{$zip->{members}}) { my $fn = $ref->{fileName}; say("Dateiname im ZIP: ====> '$fn' <===="); } } else { die("Fehler in ".__LINE__); } } else { die("Fehler in ".__LINE__); } } ########################################################### # End ENDE: say("Fertig\n".('-' x 80)); Kommt bei mir mit Strawberry 5.18.4 64 Bit auf Win7 64 Bit raus wie es auch im Screenshot zu sehen ist. Quote Was kann man machen, um dem abzuhelfen? An Nicht-Windows Nutzer hätte ich die Frage, ob es denn auf Linux/Mac mit Umlauten funktioniert. Damit wir eine sinnvolle Gegenprobe haben. Anhänge 10 print "Hallo"
20 goto 10 |