Δημοσιεύτηκε: 21 Νοέμ 2013, 21:02
alkismavridis έγραψε:
Τίθεται λοιπόν η ερώτηση πως αυτά τα δύο συνδέονται. Δηλαδή ποια σειρά από 0 και 1 αντιστοιχεί σε ποιον χαρακτήρα; Και ποιος το καθορίζει αυτό;
Η απάντηση ίσως σας απογοητεύσει. Ακόμα δεν υπάρχει μία καθολική συμφωνία ότι «αυτή η σειρά 0 και 1 αντιστοιχεί σε αυτόν τον χαρακτήρα». Ίσως και να μην υπάρξει ποτέ!
Αντίθετα υπάρχουν πολλοί τέτοιοι «χάρτες» που κάνουν την αντιστοίχηση και ονομάζονται κωδικοποιήσεις χαρακτήρων.
το linux, οι περισσότεροι ιστότοποι, και τα λογισμικά της Apple χρησιμοποιούν μία κωδικοποίηση με όνομα UTF-8.
Η Microsoft έχει τις δικές της κωδικοποιήσεις χαρακτήρων, αγνοώντας (ως συνήθως) όλο τον υπόλοιπο κόσμο. H πιο πρόσφατη (γράφω στις 15-11-2013) ονομάζεται WINDOWS-1252.
Το Windows-1253, το iso-8859-7, το CP737 είναι κωδικοποιήσεις χαρακτήρων που εμφανίστηκαν στη δεκαετία του '80 και '90.
Πρόκειται για κωδικοποιήσεις των 8-bit, με αποτέλεσμα να μπορούν να απεικονίσουν μέχρι 256 διαφορετικούς χαρακτήρες.
Όλα αυτά είναι τώρα παρωχημένα, και τώρα έχουμε το πρότυπο Unicode, http://www.unicode.org/ όπου κάθε χαρακτήρας έχει και ένα μοναδικό αριθμό αναφοράς.
Αν τρέξουμε gucharmap (Πίνακας χαρακτήρων), μπορούμε να δούμε τους χαρακτήρες του προτύπου Unicode με εύκολο τρόπο.

1. Πάνω δεξιά λέει Ubuntu, που είναι η τρέχουσα γραμματοσειρά. Όταν είναι να δείξει χαρακτήρες, τότε το πρόγραμμα θα τους δείξει με την επιλεγμένη γραμματοσειρά. Με αυτό το τρόπο μπορούμε να δούμε πως δείχνει τους χαρακτήρες μια συγκεκριμένη γραμματοσειρά.
2. Αμέσως κάτω από τη γραμματοσειρά, αναφέρει Script (Γραφή), που ουσιαστικά είναι οι χαρακτήρες Unicode σε ομάδας που βγάζουν νόημα. Για παράδειγμα, στην ομάδα Greek έχει το μονοτονικό και το πολυτονικό. Στο πρότυπο εμφανίζονται σε διαφορετικές περιοχές.
3. Για τον ελληνικό χαρακτήρα Α, ο μοναδικός αριθμός του κατά το πρότυπο Unicode είναι το U+0391, που έχει την αριθμητική τιμή 0x0391 (είναι σε δεκαεξαδική μορφή).

Εδώ είμαστε στις Λεπτομέρειες χαρακτήρα. Το ελληνικό αλφάβητο μπήκε στο πρότυπο Unicode από την αρχή, κάπου στα μέσα του '90.
Στο πρότυπο Unicode υπάρχουν κατηγοριοποιήσεις για κάθε χαρακτήρα, οπότε όταν προγραμματίζουμε, μπορούμε να ελέγχουμε αν ένας χαρακτήρας Unicode είναι αλφαβητικός, πεζό/κεφαλαίο, κ.α.
Αυτό το 0χ0391 είναι 931 στη δεκαδική μορφή. Οι υπόλοιποι ελληνική χαρακτήρες για το μονοτονικό είναι γύρω εκεί, μεταξύ 930-980.
Του πολυτονικού είναι κάπου μεταξύ 7930-8200.
Για τη χρήση του Unicode, χρειαζόμαστε κωδικοποιήσεις. Η πιο γνωστή είναι το UTF-8, που είναι μια πολύ έξυπνη κωδικοποίηση μεταβλητού μεγέθους.
Δηλαδή, το abcd είναι 4 χαρακτήρες, που σε UTF-8 καταλαμβάνουν 4 byte μόνο. Ενώ, τα ελληνικά (μονοτονικό) που γράφουμε είναι 2 byte για κάθε χαρακτήρα. Εργασία: πόσα byte είναι το «ένα μήλο»; Είναι 15 byte. Διότι έχουμε 7 χαρακτήρες μονοτονικού (7*2=14), και τον χαρακτήρα του διαστήματος που καταλαμβάνει 1 byte. Έχει ενδιαφέρον να διαβάσει κανείς το άρθρο για το πως δουλεύει το UTF-8. Ήταν μια πολύ έξυπνη λύση σε ένα περίπλοκο πρόβλημα.
Στο παραπάνω στιγμιότυπο μπορούμε να δούμε πως αποθηκεύεται εσωτερικά ένας χαρακτήρας Unicode σε κωδικοποίηση UTF-8 και σε UTF-16.
Είναι σημαντικό να πούμε ότι και το UTF-16 είναι κωδικοποίηση μεταβλητού μεγέθους, διότι υπάρχουν περισσότεροι από 65535 χαρακτήρες στο πρότυπο. Για παράδειγμα, ο χαρακτήρας [010 000]* (θα δείτε ένα κουτάκι με τα νούμερα 010 000 αν δεν έχετε γραμματοσειρά που να έχει και Γραμμική Β), καταλαμβάνει 4 byte σε UTF-8 και 4 byte σε UTF-16.
Αν έχετε διαβάσει ότι το UTF-16 καταλαμβάνει μόνο 2 byte, πρέπει να είναι από παλιά βιβλία όπου είχαν μάλλον στο μυαλό τους την παλιά κωδικοποίηση UCS-2.
Γενικά όλα τα παραπάνω δε θα τα δει κανείς σε προγραμματισμό, εκτός και αν έχει να έρθει σε επαφή με κείμενα σε παλιές κωδικοποιήσεις.
* το φόρουμ δεν υποστηρίζει χαρακτήρες Unicode από το Plane 1, οπότε δεν μπορώ να γράψω εκείνο τον χαρακτήρα.