Wednesday, April 25, 2007

UTF-8

Επειδή ένα απότομο πέρασμα από τον κατάλογο ASCII στον κατάλογο Unicode θα είχε ως αποτέλεσμα όλα τα νέα μας αρχεία να έχουν διπλάσιο μέγεθος σε σχέση με τα παλιά (16 κουτάκια αντί για 8 για κάθε αριθμό), και τα παλιά μας προγράμματα δεν θα καταλάβαιναν τι διάολο συμβαίνει στα νέα αρχεία, κάποιος σκέφτηκε το εξής έξυπνο: Κατά την αποθήκευση, αν το γράμμα (ή τα γράμματα) ήταν κάποιο από τα πρώτα 127 σύμβολα του καταλόγου ASCII, τότε να τα αποθηκεύει χρησιμοποιώντας μία οκτάδα από κουτάκια, και τα υπόλοιπα σύμβολα να τα αποθηκεύει χρησιμοποιώντας δύο ή και περισσότερες οκτάδες από κουτάκια.

Το πρόβλημα που δημιουργείται είναι το πώς θα ξεχωρίζω πότε ένα σύμβολο αναπαριστάται από μία οκτάδα και πότε από περισσότερες. Η λύση ήταν η εξής: Αν το σύμβολο αναπαριστάται από μία οκτάδα, στο πρώτο από τα οκτώ κουτάκια της οκτάδας θα έχει πάντα μηδέν. Αν το σύμβολο αναπαριστάται από περισσότερες οκτάδες, η πρώτη οκτάδα θα έχει στις πρώτες θέσεις τις τόσους άσους, όσες και οι οκτάδες που απαιτούνται. Η δεύτερη (ή η τρίτη ή η τέταρτη) οκτάδα έχουν πάντα 1 και 0 στην πρώτη και στη δεύτερη θέση τους. O Τρόπος αποθήκευσης (ή κωδικοποίησης) ονομάστηκε UTF-8 (8bit Unicode Transformation Format)

Το Ελληνικό Κεφαλαίο Άλφα Χωρίς Τόνο, σε κωδικοποίηση UTF-8 αναπαριστάται κάπως έτσι:

με κίτρινο φόντο έχουμε τα κουτάκια που λειτουργούν ως σήμανση, με πράσινο και γαλάζιο, τα κουτάκια που αναπαριστούν τον αριθμό 913. Αντιπαραβάλετε με την απλή αναπαράσταση του αριθμού 913:


(Δεν είμαι και πολύ σίγουρος ποιον θα ωφελήσουν τα τελευταία τρία posts, εκτός φυσικά από εμένα, γιατί το να τα γράψω όλα αυτά με βοήθησε στο να ξεκαθαρίσω μέσα στο κεφάλι μου. Υποθέτω αν ξεκινάτε τώρα πληροφορική, ή σας ξέφυγε το θέμα του Unicode και των character encodings (όπως εμένα) θα σας φανούν χρήσιμα. Ή ακόμη αν σας ενδιαφέρει το πώς λειτουργούν οι υπολογιστές.

Μέρος της δουλειάς βασίστηκε πάνω στο διάσημο πια άρθρο του Joel Spolsky για τα απολύτως απαραίτητα που πρέπει να ξέρει ο προγραμματιστής για το Unicode. Εσκεμμένα απέφυγα να αναφερθώ σε Big-Endian και Little-Endian θέματα)

4 comments:

hammett79 said...

Τέλεια! Την κατάλληλη στιγμή. Κάνε κι άλλα τέτοια! (Εχμ.. μήπως δέχεσαι κ ποστ-παραγγελειές; :P)

Stavros said...

Πρώτο και δεύτερο απο αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά;

Finteias said...

hammett79 said...
"Κάνε κι άλλα τέτοια!"

---------------------------

Συμφωνώ και επαυξάνω.

Anna said...

Thanks! μου λύθηκε η απορία!