logari81 έγραψε:νομίζω το έχουμε εξαντλήσει το θέμα αλλα ας προσθεσω κι εγώ πως το βλεπω. Το ερώτημα ειναι αν ειναι στραβος ο γιαλός ή αν στραβά αρμενίζουμε. Σε αυτήν την περίπτωση όλοι αυτοι που ανεβάζουν/κατεβάζουν/χρησιμοποιουν υπότιτλους σε ISO 8859-7 ή Windows 1253 αρμενίζουνε στραβά καθοτι αυτές οι κωδικοποιήσεις είναι "πρόχειρες λύσεις".
Συγγνώμη, αλλά για να καταλάβω... δλδ αν κατεβάσεις έναν υπότιτλο από κάποιο σάιτ
το οποίο σάιτ δεν σε πληροφορεί σε τι κωδικοποίηση είναι οι υπότιτλοι (και δεν έχει
υποπέσει στην αντίληψη μου κάποιο σάιτ που να σε πληροφορεί για την κωδικοποίηση),
αλλά απλά γράφει 'greek subtitle', και αυτοί οι υπότιλοι φυσικά οι περισσότεροι είναι σε
κωδικοπιοίηση των Windows καθότι οι περισσότεροι χρησιμποποιούν αυτό το λειτουργικό,
αρμενίζεις λάθος; Και το να χρησιμοποιήσεις μια ρύθμιση που σου παρέχει το εκάστοτε
πρόγραμμα που χρησιμοποιείς για να κάνεις κάτι, σημαίνει ότι στραβώνεις και το γιαλό;
Με την ίδια λογική, ένας χρήστης των Windows μπορεί να πει ότι στράβωσε ο γιαλός άμα
του πάω ένα αρχείο που δεν είναι σε κωδικοποίηση του λειτουργικού του.
Συγγνώμη, αλλά δεν μπορώ να το καταλάβω.Ίσως βέβαια και να παρερμήνευσα το κείμενο σου!
(και φυσικά δεν θέλω να προσβάλλω.)
Όπως και νάχει όμως, πιστεύω ότι είναι καθαρά μια θεωρητική κουβέντα αυτή και ότι 100
άνθρωποι μπορούν νάχουν 100 διαφορετικές απόψεις πάνω σε αυτό.
Το θέμα είναι ότι αφού χρησιμοποιούμε Ubuntu, το καλύτερο είναι να ήταν αυτοί
οι υπότιλοι σε utf-8 (πράγμα στο οποίο όλοι συμφωνούμε).
Οπότε κάθισα και έγραψα ένα μικρό σκρίπτ σε Python για να μετατρέπει το αρχείο των
υπότιτλων απο ISO 8859-7 ή windows-1253 σε utf-8. Απλά του περνάς σαν παράμετρο στην
command line το αρχείο που θες να μετατρέψεις, κάνει ενα backup του αρχικού αρχείου ώστε
αν κάτι δεν πάει καλά να μην το χάσεις, και στη συνέχεια το μετατρέπει σε utf-8.
Μέχρι στιγμής το δοκίμασα με πολλά αρχεία δικά μου και όλα λειτουργούν άψογα.
Το σκριπτ είναι το εξης:
- Κώδικας: Επιλογή όλων
#!/usr/bin/env python
import os, sys, shutil
def convert_to_utf8(filename):
file_lines = []
fpath = os.path.splitext(filename)[0]
ext = os.path.splitext(filename)[1]
newfilename = fpath + ext + '.bak'
shutil.copy(filename,newfilename)
f = open(filename, 'r')
try:
for line in f.readlines():
file_lines.append(line.decode('iso-8859-7'))
except:
file_lines = []
try:
for line in f.readlines():
file_lines.append(line.decode('windows-1253'))
except Exception, e:
print e
finally:
f.close()
n = open(filename,'w')
try:
for i in file_lines:
n.write(i.encode('utf-8'))
except Exception, e:
print e
finally:
n.close()
if __name__ == '__main__':
convert_to_utf8(sys.argv[1])
Απλά κάντε το copy και σώστε το σαν converter.py (ή όποια ονομασία θέλετε).
Μετά το τρέχετε με παράμετρο το αρχείο που θέλετε να μετατρέψετε π.χ
- Κώδικας: Επιλογή όλων
python converter.py /home/user/my_movies/And_Justice_for_All.srt
και το σκριπτ αφου δημιουργήσει ένα αντίγραφο του αρχείου με την κατάληξη .bak,
(π.χ And_Justice_for_All.srt.bak) στη συνέχεια το κωδικοποιεί σε utf-8 και είναι
έτοιμο να το χρησιμοποιήσετε.
Φυσικά αν το αρχείο μας έχει κενά ανάμεσα στις λέξεις (π.χ And Justice for All.srt)
τότε το περικλείουμε είτε σε μονά '' είτε σε διπλά " " εισαγωγικά
π.χ
- Κώδικας: Επιλογή όλων
python converter.py /home/user/my_movies/'And Justice for All.srt'
Αν για τον οποιοδήποτε λόγο το σκρίπτ δεν μπορεί να κάνει την κωδικοποίηση
(π.χ επειδή το αρχείο μας μπορεί να είναι σε άλλη κωδικοποίηση απο iso-8859-7
ή windows-1253 ή επειδή μπορεί να είναι φθαρμένο), τότε απλά ανακτήστε το αρχείο
με την κατάληξη .bak (το αρχικό δλδ).
(Το αρχείο .bak δημιουργείται φυσικά στον ίδιο κατάλογο με το αρχικό μας αρχείο.
Και υποθέτω ότι έχετε εγκατεστημένη την Python στο σύστημα σας, αν και νομίζω
όλες οι debian based distributions την έγκαθιστούν από default. Αν κάνω λάθος
διορθώστε με.)
Αν κάποιοι το βρουν χρήσιμο και το χρησιμοποιήσουν, τότε μπορώ να το φτιάξω να κάνει
μαζικές μετατροπές αρχείων σε κάποιο directory, ή ακόμη και να το φτιάξω με γραφικό
περιβάλλον ώστε να μην το χρησιμοποιούμε από command line αλλά από κάποιο παράθυρο.
Απλά πέστε το
Και συγγνώμη για το μεγάλο ποστ...
Καλησπέρα.