[PyAthens] Filename corruption

George Sakkis george.sakkis at gmail.com
Thu Dec 3 01:49:02 CET 2009


Όχι άμεσα σχετικό με Python το παρακάτω, αλλά μιας και έγινε κουβέντα
για encodings και unicode στην τελευταία συνάντηση είπα να πάρω τη
βοήθεια του κοινού.

Κατά την πρόσφατη μεταφορά αρχείων από ένα δίσκο σε άλλο (NTFS και οι
δύο) μέσω Linux ξέχασα να δηλώσω το charset στο mount με αποτέλεσμα
μερικά αρχεία με ελληνικούς χαρακτήρες να μη φτάσουν σωστά. Κάποια
ονόματα αντικαταστάθηκαν με ερωτηματικά ('?'), άλλα με άσχετα σύμβολα
και άλλα μείναν ελληνικά (το γιατί δεν πάθαν όλα το ίδιο έχει να κάνει
με ότι το copy δεν έγινε μια κι έξω και μάλλον τα mounting options ή
κάτι άλλο διέφερε). Προφανώς όσα αντικαταστάθηκαν με ερωτηματικά δεν
είναι επανακτήσιμα αλλά θα ήθελα να ανακτήσω τα υπόλοιπα αν γίνεται.
Δοκίμασα να μαντέψω το encoding με τον Universal Encoding Detector
(http://chardet.feedparser.org/) και μου δίνει utf-8 για τα
περισσότερα, και μάλιστα με μεγάλη εμπιστοσύνη. Παρ'όλα αυτά δε
βγαίνει νόημα.

Παρακάτω ακολουθεί μικρό δείγμα από ένα σχετικό directory (λόγω χώρου
κάνω extract μόνο την πρώτη λέξη κάθε αρχείου). Αν κάποιος μπορέσει να
αποκρυπτογραφήσει τα πειραγμένα ονόματα έχει free
σουβλάκια/πίτσα/μπύρα στο επόμενο meeting ;-)


>>> import os
>>> words = sorted(set(f.split()[0] for f in os.listdir('.')))
>>> words
['00021.wmv',
 'KET\xe2\x95\xac\xd0\xa8',
 '\xce\x95\xcf\x80\xce\xb9\xcf\x83\xce\xba\xce\xb5\xcf\x80\xcf\x84\xce\xae\xcf\x81\xce\xb9\xce\xbf',
 '\xe2\x95\xac\xd0\xb0\xe2\x95\xac\xe2\x94\x90\xe2\x95\xac\xe2\x95\x97\xe2\x95\xac\xe2\x95\xa3\xe2\x95\xa7\xd0\x94\xe2\x95\xac\xe2\x95\xa1\xe2\x95\xac\xd0\xbf\xe2\x95\xac\xe2\x96\x92',
 '\xe2\x95\xac\xd0\xb3\xe2\x95\xa7\xd0\x94\xe2\x95\xac\xe2\x96\x92']

>>> import chardet
>>> for w in words: print w, chardet.detect(w)
...
00021.wmv {'confidence': 1.0, 'encoding': 'ascii'}
KET╬Ш {'confidence': 0.8191677051323929, 'encoding': 'IBM855'}
Επισκεπτήριο {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
╬а╬┐╬╗╬╣╧Д╬╡╬п╬▒ {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
╬г╧Д╬▒ {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}


More information about the PyAthens mailing list