Δημοσιεύτηκε: 18 Σεπ 2008, 22:53
από simosx
Περιγραφικά, θα έλεγα ότι το πρόβλημα δεν είναι τόσο «στις κωδικοποιήσεις που χρησιμοποιούν τα Windows», όσο στη χρήση οκτάμπιτων κωδικοποιήσεων, που γίνεται για λόγος συμβατότητας με παλαιότερες εκδόσεις του λειτουργικού.

Το πρόβλημα με τις κωδικοποιήσεις 8-bit είναι ότι ένα κείμενο σε τέτοια κωδικοποίηση δεν παρέχει από μόνο του πληροφορίες για τον εύκολο προσδιορισμό της κωδικοποίησης.

Αν είναι για ηλεκτρονική αλληλογραφία, το πρωτόκολλο SMTP παρέχει πληροφορίες για την κωδικοποίηση του περιεχομένου ενός γράμματος (με το σχετικό πεδίο για encoding). Ακόμα, το θέμα ενός γράμματος μπορεί να είναι σε κάποια κωδικοποίηση διότι υπάρχει τρόπος προσδιορισμού. Για παράδειγμα, δείτε http://simosx.livejournal.com/2189.html

Αν το κείμενο είναι υπότιτλοι, ετικέτες ID3v2 σε τραγούδια, ονόματα αρχείων μέσα σε αρχείο ZIP, εγγραφές CDDB για τα CD ήχου, εκεί δεν υπάρχουν πληροφορίες κωδικοποίησης.

Θα μπορούσε να πει κανείς ότι το λειτουργικό σύστημα είναι σε θέση να επιλέξει μεταξύ windows-1253, και αν δε δουλέψει, χρησιμοποιεί UTF-8. Το πρόβλημα εδώ είναι ότι πρόκειται για πολλές γλώσσες στο κόσμο, και η πολυπλοκότητα αυξάνεται πάρα πολύ. Υπάρχει τουλάχιστον μια προσπάθεια με μια βιβλιοθήκη που με στατιστικούς τρόπους προσπαθεί να μαντέψει την κωδικοποίηση. Κάτι τέτοιο είναι ενδιαφέρον, ωστόσο το κατά πόσο καταφέρνει να έχει σωστό αποτέλεσμα εξαρτάται από το μέγεθος του μηνύματος. Ακόμα, χρειάζεται να γίνει προσπάθεια για να μπει μια τέτοια βιβλιοθήκη σε όλες τις διανομές, πρώτα.

Η ιδανική λύση είναι να μεταβούμε στην κωδικοποίηση UTF-8, διότι όταν έχεις κείμενο στην κωδικοποίηση αυτή, το κείμενο θα ισχύει για πάντα.

Αν κάποιος έχει όρεξη να κοιτάξει για τη λύση στο πρόβλημα «υπάρχει κάτι που μπορούμε να κάνουμε τώρα για να διευκολύνουμε τη μετάβαση;», γράφω παρακάτω κάποιες οδηγίες. Το θέμα όμως είναι ότι η βέλτιστη λύση είναι να κάνουμε το κόσμο να μεταβεί από τις παρωχημένες κωδικοποιήσεις σε σύγχρονες κωδικοποιήσεις (υποστήριξη κάθε γλώσσας).

Στη βιβλιοθήκη glib (GNOME), υπάρχει κώδικας που βλέπει αν ένα κείμενο είναι έγκυρο UTF-8. Αν το κείμενο δεν είναι έγκυρο UTF-8, τότε το μετατρέπει από iso-8859-1 (θεωρεί πάντα ότι αυτή είναι η αρχική κωδικοποίηση) σε UTF-8. Αν το κείμενο ήταν όμως ελληνικά, τότε είναι που βλέπουμε χαρακτήρες όπως áäâãÿãěă. Θα μπορούσε να δημιουργηθεί μια νέα μεταβλητή περιβάλλοντος π.χ. GLIB_COMPAT_ENCODING όπου κάθε εγκατάσταση του Ubuntu ανάλογα με τη γλώσσα, να θέτει τη μεταβλητή αυτή σε π.χ. windows-1253. Αυτή θα ήταν η αρχική κωδικοποίηση στις μετατροπές, όταν ένα κείμενο δεν είναι έγκυρο UTF-8. Προγραμματιστικά, ένα τέτοιο έργο νομίζω ότι χρειάζεται να κοιτάξει στον κώδικα της glib, να βρει το σημείο που κάνει την μετατροπή iso-8859-1 (ή windows-1251;) σε UTF-8, και να το κάνει να μετατρέπει από getenv ("GLIB_COMPAT_ENCODING") σε UTF-8. Μιλάμε για 3-5 γραμμές κώδικα C, στο κατάλληλο σημείο. Αν είναι να ασχοληθεί κανείς, είναι καλό να ολοκληρωθεί μέχρι το τέλος του Δεκεμβρίου, για να μπει σίγουρα στο Ubuntu 9.04.