Καλησπέρα,
Εδώ και αρκετές εβδομάδες έχω σπάσει τα νεύρα μου για να δω πώς να ξε-zip-άρω τα αρχεία αυτού του καταλόγου: ΔΕΔΟΜΕΝΑ ΜΕΤΡΗΣΕΩΝ ΑΤΜΟΣΦΑΙΡΙΚΗΣ ΡΥΠΑΝΣΗΣ
Χρειάζομαι τα αρχεία για εκπόνηση εργασίας, και δεν μπορώ να ανεχτώ το γεγονός ότι τα αρχεία αυτά πρέπει να τα ξε-zip-άρω στα windows για να πάρω σωστά τα ονόματα των αρχείων.
Για να προλάβω τυχόν σχόλια του στυλ "είναι μέρος της εργασίας σου", ΔΕΝ είναι μέρος της εργασίας μου να κάτσω να αποκρυπτογραφήσω την κωδικοποίηση που χρησιμοποίησαν στο υπουργείο για να τα zip-άρουν. Παρ'όλα αυτά, έχω αφιερώσει πολύ χρόνο στο συγκεκριμένο πρόβλημα και δεν έβγαλα άκρη...
Και για αυτό, ζητάω την βοήθειά σας προκειμένου να καταφέρω να υλοποιήσω την άσκηση ( μαθήματος προγραμματισμού στον παγκόσμιο ιστό )
Το unziping θα γίνει μέσω κώδικα php.
Με αυτόν τον κώδικα php, παίρνω το συνημμένο2:
Κώδικας:$zip = new ZipArchive; $res = $zip->open('2014.zip'); if ($res === TRUE) { $directory = new DirectoryIterator('./php_unzip/2014/'); foreach($directory as $fileInfo) { if ($fileInfo->isDot()) { continue; } // echo mb_detect_encoding($fileInfo) . " "; $kek = mb_convert_encoding($fileInfo, "UTF-8", "Windows-1253" ); // $ee = iconv('ISO-8859-7', 'Windows-1253', $fileInfo); echo "file = " . $kek . "\n"; } echo "\n" . "\n" . "kek" . "\n" . "\n"; $zip->extractTo('php_unzip'); $zip->close(); echo 'woot!' . "\n" . "\n"; } else { echo 'doh!' . "\n" . "\n"; } $dir = './php_unzip/2014/'; $files1 = scandir($dir); print_r($files1);
Το συνημμένο1 είναι από το ark σε Archlinux
- - - Updated - - -
Κώδικας:[root@i7arch http]# echo $LANG ; 7z x 2014.zip ; ls -l 2014/ en_US.UTF-8 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (306A9),ASM,AES-NI) Scanning the drive for archives: 1 file, 638027 bytes (624 KiB) Extracting archive: 2014.zip -- Path = 2014.zip Type = zip Physical Size = 638027 Everything is Ok Folders: 27 Files: 103 Size: 3076290 Compressed: 638027 total 104 drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\200\302\202''. '$'\302\217\302\200\302\220\302\200\302\221\302\211\302\204\302\223\302\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\200\302\202''. '$'\302\221\302\216\302\224\302\210\302\200\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\200\302\207\302\206\302\214\302\200\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\200\302\212\302\210\302\200\302\220\302\222\302\216\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\200\302\220\302\210\302\221\302\222\302\216\302\222\302\204\302\212\302\216\302\223\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\201\302\216\302\212\302\216\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\202\302\204\302\227\302\217\302\216\302\214\302\210\302\211\302\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\204\302\212\302\204\302\223\302\221\302\210\302\214\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\207\302\220\302\200\302\211\302\216\302\213\302\200\302\211\302\204\302\203\302\216\302\214\302\204\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\210\302\227\302\200\302\214\302\214\302\210\302\214\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\211\302\200\302\212\302\200\302\213\302\200\302\220\302\210\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\211\302\216\302\220\302\203\302\204\302\212\302\210\302\216' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\211\302\216\302\220\302\227\302\217\302\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\212\302\200\302\220\302\210\302\221\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\212\302\210\302\216\302\221\302\210\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\212\302\223\302\211\302\216\302\201\302\220\302\223\302\221\302\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\213\302\200\302\220\302\216\302\223\302\221\302\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\214\302\204\302\200'' '$'\302\221\302\213\302\223\302\220\302\214\302\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\214\302\204\302\216\302\225\302\227\302\220\302\216\302\223\302\203\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\200\302\214\302\216\302\220\302\200\302\213\302\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\200\302\222\302\206\302\221\302\210\302\227\302\214' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\204\302\220\302\210\302\221\302\222\302\204\302\220\302\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\221\302\210\302\214\302\203\302\216\302\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\200\302\222\302\220\302\200'' 1' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\204\302\210\302\220\302\200\302\210\302\200\302\221''-1' drwx------ 2 root root 4096 Oct 19 2015 ''$'\302\217\302\200\302\222\302\220\302\200'' 2' [root@i7arch http]# env LANG=C 7z x 2014.zip ; ls -l 2014/ 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (306A9),ASM,AES-NI) Scanning the drive for archives: 1 file, 638027 bytes (624 KiB) Extracting archive: 2014.zip -- Path = 2014.zip Type = zip Physical Size = 638027 Everything is Ok Folders: 27 Files: 103 Size: 3076290 Compressed: 638027 total 104 drwx------ 2 root root 4096 Oct 19 2015 ''$'\200\202''. '$'\221\216\224\210\200\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\200\202''. '$'\217\200\220\200\221\211\204\223\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\214\204\200'' '$'\221\213\223\220\214\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\201\216\212\216\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\200\207\206\214\200\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\221\210\214\203\216\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\212\200\220\210\221\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\211\216\220\227\217\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\212\210\216\221\210\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\213\200\220\216\223\221\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\204\212\204\223\221\210\214\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\200\222\206\221\210\227\214' drwx------ 2 root root 4096 Oct 19 2015 ''$'\210\227\200\214\214\210\214\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\211\216\220\203\204\212\210\216' drwx------ 2 root root 4096 Oct 19 2015 ''$'\200\212\210\200\220\222\216\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\200\214\216\220\200\213\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\202\204\227\217\216\214\210\211\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\211\200\212\200\213\200\220\210\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\212\223\211\216\201\220\223\221\206' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\204\220\210\221\222\204\220\210' drwx------ 2 root root 4096 Oct 19 2015 ''$'\214\204\216\225\227\220\216\223\203\200' drwx------ 2 root root 4096 Oct 19 2015 ''$'\200\220\210\221\222\216\222\204\212\216\223\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\207\220\200\211\216\213\200\211\204\203\216\214\204\221' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\200\222\220\200'' 1' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\204\210\220\200\210\200\221''-1' drwx------ 2 root root 4096 Oct 19 2015 ''$'\217\200\222\220\200'' 2'
Εμφάνιση 1-7 από 7
-
21-07-16, 19:44 Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #1
Τελευταία επεξεργασία από το μέλος divinesheet : 21-07-16 στις 18:35.
topkek
-
21-07-16, 21:38 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #2
Δεν μπορώ να μιλήσω για τον PHP κώδικά σου μια και δεν πολύ θυμάμαι PHP. Αν ψάχνεις τι encoding χρησιμοποιεί το zip ώστε να το χρησιμοποιήσεις στην μετατροπή, αυτό είναι εύκολο.
Κώδικας:% hexdump -Cv -n 90 ~/2014.zip 00000000 50 4b 03 04 14 00 00 00 00 00 7a 4c 53 47 00 00 |PK........zLSG..| 00000010 00 00 00 00 00 00 00 00 00 00 05 00 00 00 32 30 |..............20| 00000020 31 34 2f 50 4b 03 04 14 00 00 00 00 00 78 4c 53 |14/PK........xLS| 00000030 47 00 00 00 00 00 00 00 00 00 00 00 00 13 00 00 |G...............| 00000040 00 32 30 31 34 2f 80 82 2e 20 8f 80 90 80 91 89 |.2014/... ......| 00000050 84 93 86 2f 50 4b 03 04 14 00 |.../PK....| 0000005a
Κώδικας:% echo -ne '\x80\x82\x2e\x20\x8f\x80\x90\x80\x91\x89\x84\x93\x86' > test % file test test: Non-ISO extended-ASCII text, with no line terminators
Κώδικας:% for i in windows-1253 cp869 cp737; do > iconv -f $i -t utf-8 test > done €‚. iconv: μη έγκυρη ακολουθία εισόδου στη θέση 4 iconv: μη έγκυρη ακολουθία εισόδου στη θέση 0 ΑΓ. ΠΑΡΑΣΚΕΥΗ
Κώδικας:% ./unzip -O cp737 -l /tmp/2014.zip Archive: /tmp/2014.zip Length Date Time Name --------- ---------- ----- ---- 0 10-19-2015 09:35 2014/ 0 10-19-2015 09:35 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/ 25152 08-17-2015 11:58 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/NO#AgP2014.dat 27269 08-17-2015 11:58 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/NO2AgP2014.dat 32041 08-17-2015 11:58 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/O3#AgP2014.dat 7743 08-17-2015 11:21 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/PM10AgPEEC2014.dat 8258 08-17-2015 11:21 2014/ΑΓ. ΠΑΡΑΣΚΕΥΗ/PM2.5AgPEEC2014.dat 0 10-19-2015 09:35 2014/ΑΓ. ΣΟΦΙΑΣ/ 50544 08-17-2015 11:59 2014/ΑΓ. ΣΟΦΙΑΣ/CO#AGS2014.dat 40405 08-17-2015 12:00 2014/ΑΓ. ΣΟΦΙΑΣ/NO#AGS2014.dat 41015 08-17-2015 12:00 2014/ΑΓ. ΣΟΦΙΑΣ/NO2AGS2014.dat 37176 08-17-2015 12:00 2014/ΑΓ. ΣΟΦΙΑΣ/O3#AGS2014.dat 8235 08-17-2015 11:54 2014/ΑΓ. ΣΟΦΙΑΣ/PM10AGSEEC2014.dat 0 10-19-2015 09:35 2014/ΑΘΗΝΑΣ/ 40248 08-17-2015 12:01 2014/ΑΘΗΝΑΣ/CO#ATH2014.dat 30687 08-17-2015 12:01 2014/ΑΘΗΝΑΣ/NO#ATH2014.dat 31515 08-17-2015 12:01 2014/ΑΘΗΝΑΣ/NO2ATH2014.dat 29626 08-17-2015 12:01 2014/ΑΘΗΝΑΣ/O3#ATH2014.dat 24240 08-17-2015 12:02 2014/ΑΘΗΝΑΣ/SO2ATH2014.dat 0 10-19-2015 09:35 2014/ΑΛΙΑΡΤΟΣ/ 44623 08-17-2015 11:37 2014/ΑΛΙΑΡΤΟΣ/NO#Ali2014.dat 46569 08-17-2015 11:37 2014/ΑΛΙΑΡΤΟΣ/NO2Ali2014.dat 45234 08-17-2015 11:37 2014/ΑΛΙΑΡΤΟΣ/O3#Ali2014.dat 44467 08-17-2015 11:37 2014/ΑΛΙΑΡΤΟΣ/SO2Ali2014.dat
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
22-07-16, 15:02 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #3
Ποοοοο, τι λες τώρα!!!
Σε ευχαριστώ ΠΑΡΑ πολύ!
Έβαλα το unzip-libnatspec και όλα πήγαν ρολόι. Όπως τα παρουσίασες!
Εγώ αυτό που έκανα είναι να ξεζιπάρω τα αρχεία με utf8 (χωρίς κανένα option) και μετά προσπαθούσα να τρέξω iconv στο όνομα του αρχείου, με μεγάλη αποτυχία. Τα είχα δοκιμάσει όλα, και όλες τις μορφοποιήσεις σχετικές με ελληνικά (μαζί με CP737, CP869) αλλά προφανώς ήταν λάθος διαδικασία...
Άσε που προσπαθούσα να κάνω το ίδιο και με την iconv της PHP. Τα ίδια όμως, αποτυχία...
Πάντως cp737 από ότι βλέπω δεν υποστηρίζει η php (δεν υπάρχει encoding converting συνάρτηση για cp737), οπότε δεν θα αποφύγω κάποιο array με character mapping για αλλαγή της κωδικοποίησης.
Το ότι μου έλυσες το θέμα με το τι κωδικοποίηση αφορά τα zip όμως, αποτελεί μεγάλο βήμα :ρ
Σε ευχαριστώ και πάλι!
P.S.: Καλά ο php κώδικάς μου, είναι αστείος, απλά είχα απηυδήσει τόσο πολύ που δεν ψήθηκα να τον καθαρίσω πριν τον ποστάρωΤελευταία επεξεργασία από το μέλος divinesheet : 22-07-16 στις 15:11.
topkek
-
22-07-16, 15:27 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #4
Σε αυτές τις περιπτώσεις πάντα κάνεις τις μετατροπές όσο πιο μπροστά μπορείς. Όταν δημιουργείται το αρχείο, η συνάρτηση κάνει την μετατροπή του ονόματος σε utf8 από όποιο character set νομίζει. Έτσι αυτό που βλέπεις εσύ σε UTF-8 είναι "λάθος" πληροφορία.
Για παράδειγμα ας πούμε ότι έχεις ένα αρχείο με όνομα Ά. Αυτό σε CP737 είναι ας πούμε το byte 234. Έστω ότι το unzip αποφασίσει ότι εσύ χρησιμοποιείς CP869 οπότε το byte 234 είναι το μικρό ελληνικό πι έτσι θα γράψει σαν όνομα αρχείου τα bytes CF 80 που είναι το μικρό ελληνικό πι σε UTF-8 και όχι το CE 91 που είναι το σωστό.
Μήπως χρησιμοποιεί κάποια διαφορετική γραφή ? Η iconv της glibc για παράδειγμα σου επιτρέπει να χρησιμοποιήσεις iso8859-7, iso-8859-7, iso_8859_7, κτλ. Ανάλογα με ποια υλοποίηση iconv χρησιμοποιεί η PHP, μήπως χρειάζεται κάποια άλλη γραφή πχ dos737, ibm737, κτλ."I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
29-07-16, 18:07 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #5
-
31-07-16, 12:49 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #6
Ελληνικό δημόσιο είναι.
Τί περίμενες;
Φυσικά και θα ήταν dos 737.
Σιγά μην είχαν μεταβεί σε utf8.
Αυτά μόνο σε προηγμένες χώρες που δεν "κυβερνώνται" από λαϊκίστικες αριστερές "κυβερνήσεις" ανίκανων.Επιτέλους το ελάχιστο δυνατό, ευέλικτο, και ψηφιακό κράτος. Με διαρκή αξιολόγηση.
-
31-07-16, 16:47 Απάντηση: Ξε-zip-άρισμα με λάθος χαρακτήρες ονόματος περιεχομένου (που δουλεύει στα windows) #7
Δεν περίμενα ότι θα υποστήριζα ποτέ τον σύριζα αλλά να που χάριν στον WAN θα το κάνω Άντε για το αρχείο του 2014 να δεχτώ ότι λόγω γραφειοκρατείας, τα αποτελέσματα συμπιέστηκαν και αναρτήθηκαν αργά και έπεσε μέσα στην "λαϊκίστικη αριστερή κυβέρνηση ανίκανων". Για τα στοιχεία 1984 - 2013 τι έχεις να πεις ?
Δεύτερον, πάρα πολλές υποδομές και προγράμματα στα windows δουλεύουν με την κωδικοσελίδα του μηχανήματος, το οποίο δημιουργεί προβλήματα (Στην συγκεκριμένη περίπτωση βέβαια φταίει το zip format που δεν έχει κάποιο πεδίο για encoding και όχι τα windows). Ένα διάστημα παλαιότερα είχε κάποιο πρόγραμμα το πανεπιστήμιο με την MS δεν ξέρω τι ακριβώς είχανε κάνει αλλά μας είχανε στείλει cd εγκατάστασης για windows 2000 από πάρα πολλές γλώσσες και έπρεπε να τις στήσουμε σε κάποια μηχανήματα. Για να μπορέσεις να δεις κείμενα που είχαν Ελληνικά ή να γράψεις εσύ Ελληνικά σε windows Ινδικά, Γερμανικά, κτλ, έπρεπε να κάνουμε ολόκληρη ιστορία και να εγκαταστήσουμε ένα κάρο υποδομές.
Στα τωρινά windows εννοείται πως θα είναι πολύ πιο εύκολο αυτό αλλά γενικά τα windows έχουν αυτό το "μόνο εμείς υπάρχουμε στον σκληρό οπότε πχ σβήνουμε τον bootloader άλλων os, διαθέτουμε localized εκδόσεις οπότε αν είσαι Ινδός θα πάρεις τα ινδικά windows και γιατί να θέλεις να γράψεις εκεί Ελληνικά" και άλλες τέτοιες κοντόφθαλμες νοοτροπίες.
Ψάχνοντας να βρω πληροφορίες για την συμπεριφορά των winzip, winrar που είναι τα πιο ευρέως χρησιμοποιούμενα, βρήκα τα παρακάτω.
Ένα παράδειγμα εδώ.
Ας υποθέσουμε ότι αποσυμπίεση ενός αρχείου .zip σε έναν υπολογιστή που εκτελεί Windows 7 ή Windows Server 2008 R2. Το αρχείο .zip είχε συμπιεστεί από έναν υπολογιστή που χρησιμοποιεί ένα διαφορετικό σύστημα τοπικές ή δημιουργήθηκε από μια εφαρμογή άλλου κατασκευαστή. Στην περίπτωση αυτή, το σύστημα αποσυμπιέζει σωστά τα περιεχόμενα του αρχείου. Ωστόσο, τα ονόματα αρχείων είναι κατεστραμμένα.
Αρχικό μήνυμα από 7-zip history"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
Bookmarks