Κωδικοποίηση χαρακτήρων

Μια κωδικοποίηση χαρακτήρων αποτελείται από έναν κώδικα που συσχετίζει ένα σύνολο χαρακτήρων όπως π.χ. οι χαρακτήρες που χρησιμοποιούμε σε ένα αλφάβητο με ένα διαφορετικό σύνολο π.χ. αριθμών , ή ηλεκτρικών σημάτων, προκειμένου να διευκολυνθεί η αποθήκευση ,διαχείριση κειμένου σε υπολογιστικά συστήματα καθώς και η μεταφορά κειμένου μέσω τηλεπικοινωνιακών δικτύων. Κλασικά παραδείγματα είναι ο κώδικας Μορς που κωδικοποιεί ένα σύνολο γραμμάτων του λατινικού αλφαβήτου σε μια σειρά από μικρές και μεγάλες παύλες, και ο κώδικας ASCII,που κωδικοποιεί γράμματα,αριθμούς και άλλα σύμβολα στίξης κτλ, σαν δυαδικούς αριθμούς επτά δυαδικών ψηφίων. Π.χ. το γράμμα 'Α' κωδικοποιείται από τον κώδικα ASCII στην ακολουθία 1-0-0-0-0-0-1.

 Αρχικά το σύνολο χαρακτήρων και η κωδικοποίηση χαρακτήρων θεωρούνταν συνώνυμες έννοιες, αφού το ίδιο στάνταρντ καθόριζε και το σύνολο χαρακτήρων και το πώς θα κωδικοποιηθούν σε μια σειρά από κωδικές μονάδες ( συνήθως ένας χαρακτήρας ανά κωδική μονάδα ). Για ιστορικούς λόγους το πρότυπο MIME και συστήματα που βασίζονται σε αυτό χρησιμοποιούν τον όρο σύνολο χαρακτήρων για να αναφέρονται συνολικά στην μέθοδο κωδικοποίησης μιας ακολουθίας χαρακτήρων σε μια μια ακολουθία οχτώ μπιτ. Το Unicode και το παράλληλο πρότυπο ISO 10646 Καθολικό Σύνολο Χαρακτήρων, που μαζί αποτελούν την πιο μοντέρνα κωδικοποίηση χαρακτήρων απομακρύνθηκε από την αρχική αυτή προσέγγιση και αντίθετα διαχώρισε τις έννοιες-διαδικασίες του ποιοι χαρακτήρες είναι διαθέσιμοι την αρίθμηση τους πώς αυτοί οι αριθμοί κωδικοποιούνται σε μια σειρά από κωδικές μονάδες (αριθμοί πεπερασμένου πλήθους), και πώς τελικά αυτές οι μονάδες κωδικοποιούνται σαν μια ακολουθία bytes.Αυτός ο διαχωρισμός έχει σαν σκοπό να επιτρέψει ένα καθολικό σύνολο χαρακτήρων το οποίο θα μπορεί να κωδικοποιηθεί με πολλούς τρόπους. Σε αυτό το πλαίσιο χρειαζόμαστε πιο ακριβείς έννοιες από τις "σύνολο χαρακτήρων" και "κωδικοποίηση χαρακτήρων". Οι όροι αυτοί είναι : Το αφηρημένο σύνολο χαρακτήρων (α.σ.χ) είναι το σύνολο χαρακτήρων ενός συστήματος γραφής χωρίς να μας απασχολούν οι παραλλαγές στη γραφική απόδοση τους . Αυτό μπορεί να είναι κλειστό χωρίς να επιτρέπονται περαιτέρω προσθήκες χωρίς τη δημιουργία νέου στάνταρντ (όπως συμβαίνει με το ASCII και τη σειρά προτύπων ISO-8859 ), ή μπορεί να είναι ανοιχτό επιτρέποντας προσθήκες (όπως συμβαίνει με το Unicode και σε κάποιο βαθμό και με τις κωδικές σελίδες Windows c). Οι χαρακτήρες σε ένα δοσμένο α.σ.χ αντανακλούν αποφάσεις που έχουν παρθεί σχετικά με το πως θα υποδιαιρεθεί ένα δοσμένο σύστημα γραφής σε γραμμικές πληροφοριακές μονάδες. Π.χ. τα Λατινικά, Ελληνικά και τα Κυριλλικά αλφάβητα, χωρίζονται φυσικά σε γράμματα , ψηφία , διακριτικά , σημεία στίξης και μερικούς ειδικούς χαρακτήρες όπως το κενό, τα οποία μπορούν όλα να διευθετηθούν σε απλές γραμμικές ακολουθίες (αν και η επεξεργασία αυτών των ακολουθιών απαιτεί παραπάνω κανόνες που θα καθορίζουν πώς συγκεκριμένες ακολουθίες όπως π.χ. ένα γράμμα ακολουθούμενο από το διακριτικό του (π.χ. διαλυτικά) θα ερμηνευθούν) αυτό δεν είναι στην έκταση της έννοιας του α.σ.χ. Για ευκολία μερικά α.σ.χ μπορεί να περιέχουν έτοιμες συνθέσεις μερικών γραμμάτων με τα διακριτικά τους. Ένα κωδικοποιημένο σύνολο χαρακτήρων καθορίζει πως να αναπαραστήσεις ένα σύνολο χαρακτήρων χρησιμοποιώντας ένα πλήθος μη-αρνητικών ακεραίων κωδικών που καλούνται κωδικά σημεία. Για παράδειγμα, σε ένα δοσμένο σύνολο , ο χαρακτήρας που αναπαριστά το κεφαλαίο γράμμα "Α" στο λατινικό αλφάβητο μπορεί να απεικονιστεί στον ακέραιο 65,το κεφαλαίο "Β" στον ακέραιο 66 κτλ. Ένα ολοκληρωμένο σύνολο χαρακτήρων με τους αντίστοιχους ακέραιους είναι ένα κωδικοποιημένο σύνολο χαρακτήρων. Συμβαίνει κωδικοποιημένα σύνολα χαρακτήρων να μοιράζονται το ίδιο αφηρημένο σύνολο χαρακτήρων όπως π.χ. τα ISO-8859-7 και το κωδικοποιημένο σύνολο χαρακτήρων windows-1253 που καλύπτουν το ίδιο αφηρημένο σύνολο χαρακτήρων αλλά τους απεικονίζουν σε διαφορετικά κωδικά σημεία. Σε ένα κωδικοποιημένο σύνολο χαρακτήρων κάθε κωδικό σημείο αναπαριστά ένα χαρακτήρα. Μια Μορφή κωδικοποίησης χαρακτήρων (ΜΚΧ) καθορίζει την μετατροπή των ακεραίων (κωδικών σημείων) ενός κωδικοποιημένου σύνολου χαρακτήρων σε ένα σύνολο ακεραίων περιορισμένου μεγέθους κωδικές τιμές που διευκολύνουν την αποθήκευση σε ένα σύστημα που αναπαριστά αριθμούς σε δυαδική μορφή χρησιμοποιώντας ένα σταθερό αριθμό από bits. Για παράδειγμα, ένα σύστημα που αποθηκεύει αριθμούς σε μονάδες 16-μπιτ, μπορεί να αναπαραστήσει απευθείας ακεραίους από το 0 μέχρι το 65536. Οπότε η ΜΚΧ καθορίζει μια απεικόνιση απλών κωδικών σημείων από ένα εύρος τιμών π.χ. 0 - 1.4 εκατομμύρια σε μια σειρά κωδικών τιμών σε ένα εύρος π.χ. 0-65536. Στην πιο απλή περίπτωση ΜΚΧ έχουμε ένα υπολογιστικό σύστημα με μονάδες αποθήκευσης αρκετά μεγάλες για την αναπαράσταση όλων των κωδικών σημείων οπότε η ΜΚΧ απλά απεικονίζει απευθείας κάθε κωδικό σημείο σε μια κωδική τιμή. Αυτό συμβαίνει π.χ. με κωδικοποιημένα σύνολα χαρακτήρων που ταιριάζουν σε 8 μπιτς (όπως οι περισσότερες παραδοσιακές μη-CJK κωδικοποιήσεις) και επαρκεί για κωδικοποιημένα σύνολα χαρακτήρων που ταιριάζουν σε 16μπιτς. Παρ'ολα αυτά καθώς το μέγεθος των κωδικοποιημένων συνόλων χαρακτήρων αυξάνει (π.χ. η μοντέρνα εκδοχή του Unicode απαιτεί 21 μπιτς/χαρακτήρα) αυτό το απλό σχήμα γίνεται όλο και δυσκολότερο να υλοποιηθεί. Γι´αυτό και πιο πολλά συστήματα σήμερα χρησιμοποιούν την ΜΚΧ UTF-8 και την UTF-16 τα οποία απεικονίζουν κωδικά σημεία του προτύπου Unicode σε ακολουθίες byte, 16bit μεταβλητού μήκους. Ένα Σχήμα κωδικοποίησης χαρακτήρων (ΣΚΧ) καθορίζει πως οι κωδικές τιμές θα απεικονιστούν σε μια ακολουθία byte κατάλληλων να αποθηκευτούν σε ένα σύστημα αρχείων ή για μετάδοση σε ένα δίκτυο. Με το Unicode χρησιμοποιείται ένα απλό σχήμα κωδικοποίησης που απλά καθορίζει αν τα bytes για κάθε ακέραιο θα είναι διατεταγμένα σε big-endian ή little-endian σειρά (αν και αυτό δεν χρειάζεται με το UTF-8). Αρχικά δημιουργήθηκαν τα κωδικοποιημένα σύνολα χαρακτήρων ASCII(1963) και EBCDIC(1964) τα οποία αφορούσαν μόνο τους χαρακτήρες των λατινικών αλφαβήτων. Οι περιορισμοί τους λοιπόν δεν άρχισαν να φανούν, και διάφοροι πρόχειροι τρόποι που αποτελούσαν παραλλαγές τους προτάθηκαν για να τους επεκτείνουν ώστε να υποστηρίζονται και άλλες γλώσσες. Η ανάγκη όμως για υποστήριξη και συμβόλων γλωσσών όπως της Ανατολικής Ασίας που περιέχουν εκατοντάδες σύμβολα απαιτούσε πλέον μια πιο συστηματική προσέγγιση για την κωδικοποιήση χαρακτήρων. Μια τέτοια συστηματική προσπάθεια έγινε με το σύνολο κωδικοποιημένων χαρακτήρων Unicode που περιλαμβάνει πάνω από 100.000 χαρακτήρες. Κάθε ένας από αυτούς τους χαρακτήρες αντιστοιχεί μέσω μιας ένα προς ένα απεικόνισης σε έναν μοναδικό ακέραιο που ανήκει στο διάστημα από το 0 μέχρι το 10ffff δεκαεξαδικό σύστημα, δηλαδή λίγο περισσότερους από ένα εκατομμύριο αριθμούς με τους οποίους μπορούμε να κωδικοποιήσουμε δυνητικά αντίστοιχους στο πλήθος χαρακτήρες. Επειδή η πλειονότητα των εφαρμογών χρησιμοποιεί μόνο ένα μικρό υποσύνολο από τα αλφάβητα που υποστηρίζει το Unicode σε αυτές χρησιμοποιείται κυρίως το σχήμα UTF-8 για λόγους εξοικονόμησης μνήμης. ISO 646 ASCII EBCDIC ISO 8859: ISO 8859-1, ISO 8859-2, ISO 8859-3, ISO 8859-4, ISO 8859-5, ISO 8859-6, ISO 8859-7, ISO 8859-8, ISO 8859-9, ISO 8859-10, ISO 8859-11, ISO 8859-13, ISO 8859-14, ISO 8859-15, ISO 8859-16 DOS σύνολα χαρακτήρων: CP437, CP737, CP850, CP852, CP855, CP857, CP858, CP860, CP861, CP863, CP865, CP866, CP869 Windows σύνολα χαρακτήρων: Windows-1250 Windows-1251 για Κυριλλικά αλφάβητα Windows-1252 Windows-1253 Windows-1254 Windows-1255 Windows-1256 Windows-1257 Windows-1258 για βιετναμέζικα KOI8-R, KOI8-U, KOI7 ISCII VISCII Big5 HKSCS Guobiao GB2312 GB18030 ISO 2022, Shift-JIS, EUC Unicode (και υποσύνολα του, όπως το 16-bit 'Βασικό πολυγλωσσικό πλάνο'). Δες UTF-8 "Μια εισαγωγή σε θέματα κωδικοποίησης χαρακτήρων" Αρχειοθετήθηκε 2017-09-17 στο Wayback Machine.