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

Μια **κωδικοποίηση χαρακτήρων** αποτελείται
από έναν κώδικα που συσχετίζει
ένα σύνολο χαρακτήρων όπως π.χ. οι χαρακτήρες
που χρησιμοποιούμε σε ένα αλφάβητο με ένα 
διαφορετικό σύνολο π.χ. αριθμών , ή ηλεκτρικών
σημάτων, προκειμένου να διευκολυνθεί η αποθήκευση ,διαχείριση κειμένου σε
υπολογιστικά συστήματα καθώς και η μεταφορά
κειμένου μέσω τηλεπικοινωνιακών δικτύων. 
Κλασικά παραδείγματα είναι ο κώδικας Μορς
που κωδικοποιεί ένα σύνολο γραμμάτων του
λατινικού αλφαβήτου σε μια σειρά από μικρές και μεγάλες παύλες,
και ο κώδικας 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

## Εξωτερικοί σύνδεσμοι
* "Μια εισαγωγή σε θέματα κωδικοποίησης χαρακτήρων"