Jemand zu Hause?Leser: 16
system ('/usr/bin/unzip','ziparchiv','-d','/Zielverzeichnis');QuoteLANG=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
print setlocale(LC_CTYPE); # Ergebnis "C"
Quote0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
2009-04-29T21:12:32 frankes[...]
Das Problem scheint zu sein, dass ZIP Archive (zumindest unter unzip) nicht den charset der Dateinamen mit speichert (kommt wohl in Version 6).
[...]
Archive::zip auf dem Server zum Laufen zu bringen. Auf dem ersten Blick könnte das funktionieren, da die Module, auf die Archive::zip zurückgreift vorhanden sind und das kopieren des Perl-Modul-Codes reichen könnte. Vielleicht komme ich dann mit dem Tipp von Jean Benoit ( http://tracker.moodle.org/browse/MDL-6733 ) weiter.2009-04-30T19:22:02 frankes[...]
Wie oben beschrieben bekomme ich die Files angezeigt, im FTP-Client als auch im also auch mit den Perl Verzeichnis und Dateioperationen, also auch über Shell Aufrufe (in meinem Fall mittels Perl system() )
Datei Operationen mittels FTP Client, Perl und Shell wie umbenennen, löschen etc. führen beim FTP Client, Perl als auch der Shell zur Fehlermeldung, dass das File nicht existieren würde.
[...]
Quote[...]
Erklären kann ich mir das nur so, dass die Filenamen im Verzeichnis der Festplatte eingetragen, die Daten aber wegen eines Fehlers nie geschrieben wurden. Wahrscheinlich sind die Einträge im Verzeichnis der Festplatte gleichfalls Fehlerhaft.
[...]
Archive::Zip Modul pure Perl, so dass man es einfach durch kopieren auch auf Servern verwenden kann, wo es nicht installiert ist.
Archive::Zip benötigten Module installiert sind (vgl. dazu die Dokumentation von
Archive::Zip).QuotefileAttributeFormat() = MSDOS/FAT
Quotezip.pl Archiv.zip
Encode::Guess festzustellen, ob ein ascii oder cp850 Zeichensatz verwendet wurde. UTF8 wird leider nicht sicher erkannt.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
#!/usr/bin/perl -w ########### zip.pl ################ # Testing for modul Active::zip # Unpack given ZIP files in the same directory use lib './'; use strict; use Carp; use Encode; use Encode::Guess; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); use utf8; use open ':utf8'; binmode STDOUT,':utf8'; my $zip = Archive::Zip->new(); my @encodings = qw(ascii cp850); my $m = ''; my $n = ''; my $charset = ''; die 'read error: ',$ARGV[0] unless $zip->read( $ARGV[0] ) == AZ_OK; foreach $m ($zip->members()) { print "member filename: ",$m->fileName(),"\n"; print "fileAttributeFormat: ", $m->fileAttributeFormat(),"\n"; $n = $m->fileName(); print "Try to guess encoding\n"; $charset = guess_encoding($n, @encodings); #no charset found unless (ref $charset) { print "No charset found: $charset\n"; print "Using member filename like it is: $n\n"; $zip->extractMember($m); next; } #charset found $charset = $charset->name; print "Guessed charset: ",$charset,"\n"; print "Archive given member filename is $n.\n"; $n = decode($charset,$n); $m->extractToFileNamed($n) ; print "Decoded to $n\n"; print "----------------\n"; } print 'done.';
use strict; use warnings;