Unicode

Στους υπολογιστές, το διεθνές πρότυπο Unicode στοχεύει στην κωδικοποίηση όλων των συστημάτων γραφής που χρησιμοποιούνται στον πλανήτη, ώστε να γίνει δυνατή η αποθήκευση -στη μνήμη ενός υπολογιστή- γραπτού κειμένου όλων των γλωσσών συμπεριλαμβανομένων και συμβόλων επιστημών, όπως μαθηματικά, φυσική κτλ. 

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

Παρά τα τεχνικά προβλήματα που έχουν παρουσιαστεί το Unicode έχει καθιερωθεί ως το πιο πλήρες σύνολο χαρακτήρων και ως η προτιμότερη κωδικοποίηση σε πολυγλωσσικό λογισμικό. Πολλά πρόσφατα πρότυπα όπως το XML, καθώς και λογισμικό συστήματος όπως λειτουργικά συστήματα, έχουν υιοθετήσει το Unicode για να αναπαριστούν εσωτερικά κείμενο.

Γέννηση και ανάπτυξη του προτύπου 

Το πρότυπο Unicode είχε τον ρητό στόχο να ξεπεράσει τους περιορισμούς των παλαιότερων ("παραδοσιακών") προτύπων για κωδικοποίηση χαρακτήρων όπως για παράδειγμα το ISO 8859 πρότυπο, το οποίο χρησιμοποιήθηκε ευρέως σε πολλές χώρες στον κόσμο, αλλά παρουσίαζε προβλήματα ασυμβατότητας μεταξύ των διαφορετικών υλοποιήσεών του.
Γενικά, πολλά παλαιότερα πρότυπα για κωδικοποίηση χαρακτήρων μοιράζονται ένα κοινό πρόβλημα: το ότι επιτρέπουν υποστήριξη μονο δύο αλφαβήτων σε ένα συγκεκριμένο υπολογιστή, συνήθως του Λατινικού και ενός τοπικού, δηλαδή δεν υποστηρίζουν πολλά αλφάβητα στον ίδιο υπολογιστή. Για παράδειγμα, οσον αφορά το πρότυπο ISO 8859, ένας υπολογιστής στην Ελλάδα είναι (συνήθως) ρυθμισμένος να υποστηρίζει μονο το Λατινικό και το Ελληνικό αλφάβητο για κείμενο κωδικοποιημένο κατά ISO 8859. Έτσι, η ανάγνωση κειμένου (κωδικοποιημένου κατά ISO 8859) που περιέχει κάποιο άλλο αλφάβητο (όπως για παράδειγμα Ρώσικο, Εβραϊκό κλπ) θα είναι προβληματική σε Ελληνικό υπολογιστή, αφού οι (Ρωσικοί, Εβραϊκοί κλπ) χαρακτήρες δεν θα εμφανίζονται σωστά. Αυτό συμβαίνει για το πρότυπο ISO 8859 χρησιμοποιεί μόνο 8 bit για να κωδικοποιήσει κάθε χαρακτήρα (δηλαδή, συνολικά μπορούμε να αναπαραστήσουμε μονο 256 διαφορετικούς χαρακτήρες). Οι πρώτες 128 θέσεις δεσμεύονται για το Λατινικό αλφάβητο και μερικά σύμβολα, ενώ οι υπόλοιπες 128 για το τοπικό μη-Λατινογενές αλφάβητο (όποιο και αν είναι αυτό Ελληνικό, Ρώσικο, Εβραϊκό κλπ). Έτσι πρακτικά, οι χαρακτήρες των μη-λατινογενών αλφάβητων "μοιράζονται" τις ίδιες θέσεις με τους χαρακτήρες κάποιου άλλου μη-λατινογενούς αλφαβήτου, και άρα δεν μπορούν να υποστηρίζονται ταυτόχρονα από το σύστημα (δεν είναι δυνατόν μια θέση να αντιστοιχεί σε πάνω από έναν χαρακτήρες). 

Το Unicode μετατρέπει κάθε χαρακτήρα σε ένα κωδικό σημείο ("θέση/τιμή κώδικα"), χρησιμοποιώντας έως και 16 bit ανά χαρακτήρα το οποίο εξασφαλίζει ότι όλοι οι χαρακτήρες μπορούν να υποστηρίζονται από όλα τα υπολογιστικά συστήματα. Το unicode δεν κωδικοποιεί τη μορφοποίηση του κειμένου (στυλ/γραμματοσειρά/μέγεθος κλπ).Το πρότυπο Unicode αφήνει το ανάλογο λογισμικό (πλοηγός Διαδικτύου, επεξεργαστής κειμένου) να εφαρμόσει την οπτική αναπαράσταση (στυλ, μέγεθος, γραμματοσειρά) των χαρακτήρων.

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

Αλφάβητα που περιλαμβάνονται 

Το Unicode περιλαμβάνει σχεδόν όλα τα συστήματα γραφής που είναι σε χρήση σήμερα.
Αυτά είναι τα:

Το Unicode έχει προσθέσει και άλλα αλφάβητα όπως ιστορικά αλφάβητα και εξαφανισμένα αλφάβητα για ακαδημαϊκούς λόγους:

Επίσης περιλαμβάνει και άλλα σύμβολα που χρησιμοποιούνται στα μαθηματικά και την μουσική.

Διάφορα 

Το 1997 Μίχαελ Έβερσον πρότεινε να κωδικοποιηθούν και οι χαρακτήρες της φανταστικής Κλίνγκον γλώσσας στο Επίπεδο 1 του ISO/IEC 10646-2. Αλλά η πρόταση αυτή απορρίφθηκε όπως και η πρόταση για συμπερίληψη γλωσσών του Τόλκιν.

Κωδικοποιήσεις

Πρότυπα 

Η κοινοπραξία Unicode με έδρα την Καλιφόρνια, αναπτύσσει το πρότυπο Unicode. Οποιαδήποτε οργάνωση ή ιδιώτης μπορεί να γίνει μέλος της εφόσον πληρώσει συνδρομή.
Στα μέλη συμπεριλαμβάνονται σχεδόν όλες τις μεγάλες εταιρείες λογισμικού και υλικού που ενδιαφέρονται σχετικά όπως οι Apple, Microsoft, IBM, Xerox, HP, Adobe Systems και πολλές άλλες.

Η κοινοπραξία δημοσίευσε πρώτη φορά Το πρότυπο Unicode (ISBN 0-321-18578-1) το 1991,και συνεχίζει να αναπτύσσει πρότυπα βασισμένα στην αρχική αυτή εργασία. Η κοινοπραξία Unicode αναπτύχθηκε σε συνδυασμό με τον Διεθνή Οργανισμό Τυποποίησης ISO, και το πρότυπό της μοιράζεται το σύνολο χαρακτήρων της με το πρότυποISO/IEC 10646. 
Το Unicode και το ISO/IEC 10646 είναι ισοδύναμα ως κωδικοποιήσεις χαρακτήρων αλλά το Unicode περιέχει πολύ περισσότερες πληροφορίες για προγραμματιστές που το υλοποιούν, καλύπτοντας σε βάθος θέματα όπως κωδικοποίηση βασισμένη σε μπιτ, Unicode collation αλγόριθμοι, και γραφική απόδοση. Το Unicode απαριθμεί αρκετές ιδιότητες χαρακτήρων, περιλαμβάνοντας και αυτές που χρειάζονται για BiDi υποστήριξη. Τα δυο πρότυπα χρησιμοποιούν μερικώς διαφορετική ορολογία.

Όταν γράφουμε για κωδικά σημεία του Unicode είναι σύνηθες να χρησιμοποιούμε τη μορφή U+xxxx or U+xxxxxx όπου xxxx ή xxxxxx είναι το κωδικό σημείο στο δεκαεξαδικό σύστημα.

Unicode ιστορικό αναθεωρήσεων 

 1991 Unicode 1.0
 1993 Unicode 1.1
 1996 Unicode 2.0
 1998 Unicode 2.1
 1999 Unicode 3.0
 2001 Unicode 3.1
 2002 Unicode 3.2
 2003 Unicode 4.0
 2005 Unicode 4.1

Αποθήκευση μεταφορά και επεξεργασία 

Μέχρι τώρα το Unicode παρουσιάστηκε απλά ως μια απεικόνιση κάθε χαρακτήρα που χρησιμοποιείται σε κάποιο αλφάβητο στη Γη σε έναν μοναδικό αριθμό, το κωδικό σημείο. Όμως η αποθήκευση αυτών των αριθμών κατά την επεξεργασία κειμένου είναι ένα εντελώς διαφορετικό θέμα. 
Προβλήματα ανακύπτουν από το γεγονός ότι το λογισμικό που γράφεται στον δυτικό κόσμο χειρίζεται μόνο κωδικοποιήσεις 8-bit με την unicode υποστήριξη να προστίθεται πολύ αργότερα.

Η εσωτερική λογική παραδοσιακών 8-μπιτ εφαρμογών επιτρέπει μόνο 8 μπιτς για κάθε χαρακτήρα κάνοντας αδύνατη τη χρησιμοποίηση περισσότερων των 256 κωδικών σημείων χωρίς ειδική επεξεργασία.
Έτσι οι μηχανικοί λογισμικού έχουν προτείνει διάφορους μηχανισμούς για την υλοποίηση του Unicode. Ποια υλοποίηση χρησιμοποιεί ο κάθε προγραμματιστής από θέματα χωρητικότητας, συμβατότητας πηγαίου κώδικα και διαλειτουργικότητας με άλλα συστήματα.

Το Unicode ορίζει δύο τρόπους απεικόνισης:
 Τις UTF (Unicode Transformation Format) κωδικοποιήσεις
 Και τις UCS (Universal Character Set) κωδικοποιήσεις
Αυτές οι κωδικοποιήσεις περιλαμβάνουν τις εξής κύριες: 
 UTF-32
 UCS-4
 UTF-16
 UCS-2
 UTF-8
 UTF-EBCDIC
 UTF-7
(Ο αριθμός υποδηλώνει τον αριθμό των μπιτς σε κάθε μονάδα (για UTF κωδικοποιήσεις) ή byter ανά μονάδα (για UCS κωδικοποιήσεις).)

Έτοιμοι και σύνθετοι χαρακτήρες 
Το Unicode περιλαμβάνει ένα μηχανισμό τροποποίησης του σχήματος των χαρακτήρων κι έτσι επεκτείνει το ρεπερτόριο των υποστηριζόμενων γλυφών. Αυτό καλύπτει τη χρήση συνδυαζόμενων διακριτικών χαρακτήρων. Αυτοί εισάγονται μετά τον κύριο χαρακτήρα (μπορεί κανείς να σωρρεύσει περισσότερους συνδυαζόμενους διακριτικούς χαρακτήρες στον ίδιο χαρακτήρα). Ωστόσο, για λόγους συμβατότητας, το Unicode περιλαμβάνει επίσης μια μεγάλη ποσότητα από προσυντεθιμένους χαρακτήρες. Έτσι, σε πολλές περιπτώσεις, οι χρήστες έχουν στη διάθεσή τους πολλούς τρόπους κωδικοποίησης του ίδιου χαρακτήρα. Για να το αντιμετωπίσει αυτό, το Unicode παρέχει τον μηχανισμό των μετασχηματισμών κανονικής ισοδυναμίας.
Παρόμοια κατάσταση ισχύει και με το Hangul. Το Unicode παρέχει τον μηχανισμό σύνθεσης συλλαβών Hangul με το Hangul Jamo. Ωστόσο, παρέχει επίσης προσυντεθιμένες συλλαβές Hangul (11,171 συλλαβές)

Τα ιδεογράμματα CJK (Κίνα, Ιαπωνία, Κορέα) έχουν επί του παρόντος κώδικες μόνο για την προσυντεθιμένη μορφή τους. Ακόμα όμως, τα περισσότερα από αυτά τα ιδεογραφήματα τελικώς αποτελούνται από απλούστερα στοιχεία, έτσι, κατ' αρχήν το Unicode μπορεί να τα αποσυνθέσει όπως συμβαίνει με τα Hangul. Αυτό θα μείωνε σε μεγάλο βαθμό τον αριθμό των απαιτούμενων κωδικών σημείων, ενώ ταυτόχρονα επιτρέπει την εμφάνιση στην πραγματικότητα κάθε νοητού ιδεογραφήματος (καταργώντας έτσι τα προβλήματα της Han unification) Μια παρόμοια ιδέα καλύπτει ορισμένες μεθόδους εισαγωγής όπως η μέθοδος Cangjie και Wubi. Ωστόσο, οι προσπάθειες να γίνει αυτό για κωδικοποίηση χαρακτήρων σκόνταψαν πάνω στο γεγονός ότι τα ιδεογραφήματα δεν αποσυντίθενται τόσο απλά ή τόσο κανονικά όσο δείχνουν.

Οι συνδυαζόμενοι χαρακτήρες, όπως η περίπλοκη μορφοποίηση του script που απαιτείται για να αποδώσει κανείς σωστά ένα Αραβικό κείμενο και πολλά άλλα scripts, συχνά εξαρτώνται από περίπλοκες τεχνολογίες γραμματοσειρών, όπως η Open Type (από την Adobe και τη Microsoft), την Graphite (από την SIL International) και την Apple Advanced Typography AAT (από την Apple Computer), μέσω της οποίας ο σχεδιαστής γραμματοσειράς περιλαμβάνει οδηγίες σε ένα λογισμικό δημιουργίας γραμματοσειρών για το πως θα παράγει διαφορετικές σειρές χαρακτήρων. Μια άλλη μέθοδος που χρησιμοποιείται σε γραμματοσειρές με σταθερό πλάτος είναι να τοποθετείται το σύμβολο του συνδυαζόμενου χαρακτήρα πριν τα δεξιά του (sidebearing). Αυτή η μέθοδος, ωστόσο, λειτουργεί μόνο για ορισμένα διακριτικά και η σώρρευση δεν θα γίνει σωστά.

Μέχρι και το 2004, τα περισότερα λογισμικά ακόμα δεν μπορούσαν να χειριστούν αξιόπιστα πολλά χαρακτηριστικά που δεν υποστηρίζονταν από παλαιότερες τυποποιήσεις γραμματοσειρών, έτσι το να συνδυάζει κανείς χαρακτήρες, γενικώς δεν λειτουργούσε σωστά. Υποθετικά, το  (προσυντεθιμένο e με περισπωμένη και οξεία) και το  (e που ακολουθείται από συνδυαζόμενη περισπωμένη επάνω και συνδυαζόμενη οξεία επάνω) είναι πανομοιότυπα στην εμφάνιση, δίνοντας και τα δύο ένα e με περισπωμένη και οξεία, αλλά η εμφάνιση μπορεί να διαφοροποιείται σε μεγάλο βαθμό κατά την εφαρμογή εφαρμογών λογισμικού.

Επίσης, οι κάτω τελείες, οι οποίες χρειάζονται στα Ινδικά Romanization, συχνά θα τοποθετούνται λανθασμένα ή ακόμα χειρότερα.
Παράδειγμα:

Βέβαια, αυτό δεν είναι στην πραγματικότητα μια αδυναμία του ίδιου του Unicode, αλλά απλώς αποκαλύπτει κενά της τεχνολογίας απόδοσης και των γραμματοσειρών.

Χρήση του Unicode

Λειτουργικά συστήματα 

Παρά τα τεχνικά προβλήματα τους περιορισμούς και την κριτική στη πορεία, το Unicode έχει επικρατήσει ως το κυρίαρχο σχήμα κωδικοποίησης χαρακτήρων.
Τα Windows NT και οι απόγονοί του Windows 2000 και Windows XP κάνουν εκτεταμένη χρήση του σχήματος κωδικοποίησης UTF-16 για εσωτερική αναπαράσταση κειμένου. UNIX λειτουργικά συστήματα όπως  GNU/Linux, Plan 9 από Bell Labs, BSD και  Mac OS X έχουν υιοθετήσει το σχήμα UTF-8, ως τη βάση για την αναπαράσταση  πολυγλωσσικό κείμενο.

Ηλεκτρονική αλληλογραφία 

Το πρότυπο MIME ορίζει δύο διαφορετικούς μηχανισμούς για κωδικοποίηση όχι-ASCII χαρακτήρων στα μηνύματα ηλεκτρονικής αλληλογραφίας,e-mails, ανάλογα με το αν οι χαρακτήρες είναι στις επικεφαλίδες του ηλ.μηνύματος όπως π.χ. η επικεφαλίδα "Θέμα:" ή βρίσκονται στο κυρίος κείμενο του ηλεκτρονικού μηνύματος. Και στις δυο περιπτώσεις, προσδιορίζεται το αρχικό σύνολο χαρακτήρων καθώς και η κωδικοποίηση μεταφοράς. Για ηλεκτρονική αλληλογραφία  με Unicode χαρακτήρες προτείνονται το σχήμα κωδικοποίησης UTF-8 και η κωδικοποίηση μεταφοράς Base64. Οι λεπτομέρειες των δύο μηχανισμών καθορίζονται στο πρότυπο MIME και γενικά είναι κρυμμένοι από τον απλό χρήστη λογισμικού
ηλ. αλληλογραφίας.

Η υιοθέτηση του Unicode στην Ηλεκτρονική αλληλογραφία είναι πολύ αργή. Τα περισσότερα κείμενα στην ανατολική Ασία κωδικοποιούνται άκομα σε τοπικές κωδικοποιήσεις όπως η Shift-JIS, και πολλά δημοφιλή προγράμματα ηλ.αλληλογραφίας ακόμα και αν έχουν κάποια unicode υποστήριξη εντούτοις δεν μπορούν να χειριστούν Unicode δεδομένα σωστά. Η κατάσταση αυτή δεν προβλέπεται να αλλάξει το προσεχές μέλλον.

Διαδίκτυο 

Οι καινούργιοι πλοηγοί διαδικτύου μπορούν και απεικονίζουν σωστά ιστοσελίδες με Unicode χαρακτήρες εφόσον έχει εγκατασταθεί η ανάλογη  γραμματοσειρά.

Παρόλο που συντακτικοί κανόνες μπορεί να επηρεάζουν τη σειρά με την οποία οι χαρακτήρες επιτρέπεται να εμφανίζονται και η γλώσσα HTML 4.0 αλλά και η XML 1.0 εξ ορισμού υποστηρίζουν έγγραφα που αποτελούνται από χαρακτήρες από όλο το εύρος των κωδικών σημείων του Unicode εξαιρουμένων μόνο κάποιων χαρακτήρων ελέγχου  τα μόνιμα μη-διαθέσιμα κωδικά σημεία D800-DFFF, οποιοδήποτε κωδικό σημείο που τελειώνει σε FFFE or FFFF και οποιοδήποτε κωδικό σημείο πάνω από 10FFFF. Αυτοί οι χαρακτήρες παρουσιάζονται είτε απευθείας ως μπάιτς σύμφωνα με την κωδικοποίηση του εγγράφου,εφόσον υποστηρίζονται από την κωδικοποίηση,ή μπορούν να γραφτούν ως αριθμητικές αναφορές χαρακτήρων βασισμένες στο κωδικό σημείο του Unicode χαρακτήρα, εφόσον η κωδικοποίηση που χρησιμοποιεί το έγγραφο επιτρέπει τα ψηφία και τα σύμβολα που χρειάζονται  για να γράψουμε τις αναφορές (κάτι που συμβαίνει με όλες τις κωδικοποιήσεις που έχουν υιοθετηθεί στο διαδίκτυο)
Για παράδειγμα οι αναφορές :
Δ Й ק م ๗ あ 叶 葉 냻 (ή η ίδια τιμή στο δεκαεξαδικό με πρόθεμα &#x ) εμφανίζεται στον πλοηγό σου ως  Δ, Й, ק, م, ๗, あ, 叶, 葉 και 냻—εφόσον έχεις την κατάλληλη γραμματοσειρά, αυτά τα σύμβολα φαίνονται σαν Greek capital letter "Delta", Cyrillic capital letter "Short I", Arabic letter "Meem", Hebrew letter "Qof", Thai numeral 7, Japanese Hiragana "A", simplified Chinese "Leaf", traditional Chinese "Leaf", and Korean Hangul syllable "Nyaelh", αντίστοιχα.

Γραμματοσειρές 

Ελεύθερες και εμπορεύσιμες γραμματοσειρές που βασίζονται στο Unicode πρότυπο είναι κοινές, με πρώτες τις TrueType και τώρα τις OpenType γραμματοσειρές που υποστηρίζουν και οι δύο Unicode απεικονίζοντας κωδικά σημεία σε συγκεκριμένες εμφανίσεις χαρακτήρων.

Υπάρχουν χιλίαδες γραμματοσειρές στην αγορά,αλλά λιγότερες από δώδεκα προσπαθούν να υποστηρίξουν την πλειοψηφία του συνόλου χαρακτήρων 
του προτύπου Unicode. 
Αντίθετα οι βασισμένες στο Unicode γραμματοσειρές συνήθως υποστηρίζουν μόνο βασικό ASCII και κάποια συγκεκριμένα αλφάβητα. Αυτό γίνεται κυρίως για λόγους οικονομίας των δημιουργών γραμματοσειρών και απόδοσης των προγραμμάτων που μπορεί να γονατίσουν καθώς η απόδοση γραμματοσειρών είναι μια διαδικασία που καταναλώνει πολλούς πόρους ενός υπολογιστή.
 
Χαρακτήρες Unicode που δεν μπορούν να αποδωθούν γραφικά απεικονίζονται με ένα λευκό τετράγωνο.

Μηχανές γραφικής απόδοσης πολυγλωσσικού κειμένου 
 Uniscribe - Windows
 Apple Type Services for Unicode Imaging - νέα μηχανή για  Macintosh
 WorldScript - παλία μηχανή για Macintosh
 Pango - λογισμικό ανοιχτού κώδικα
 ICU Layout Engine - λογισμικό ανοιχτού κώδικα
 Graphite  - (open source renderer from SIL)

Μέθοδοι εισαγωγής 
Οι επεξεργαστές κειμένου  Microsoft Word επιτρέπουν την εισαγωγή χαρακτήρων Unicode με δυο τρόπους:
 πληκτρολογώντας το δεκαεξαδικό κωδικό σημείο, π.χ. 014Β(ή U+014b) για τον ŋ,και πατώντας alt + x προκειμένου να αντικατασταθεί η συμβολοσειρά στα αριστερά του δρομέα με τον αντίστοιχο χαρακτήρα unicode. Συνήθως γίνεται και το αντίστροφο,δηλαδή άν έχεις έναν unicode χαρακτήρα στα αριστερά του δρομέα και πατήσεις Alt + x το Word θα αντικαταστήσει τον χαρακτήρα με το ισοδύναμό του κωδικό σημείο στο δεκαεξαδικό ή ακόμα 
 πληκτρολογώντας Alt + #, όπου  # είναι το δεκαδικό κωδικό σημείο, π.χ. Alt + 0331 θα μας δώσει τον χαρακτήρα Unicode ŋ.

Το Gnome2 ακολουθεί το πρότυπο ISO 14755. 
Κράτησε πατημένα τα πλήκτρα Ctrl and Shift και εισήγαγε στο δεκαεξαδικό το κωδικό σημείο του unicode χαρακτήρα που θέλεις να εμφανιστεί.

Εξωτερικοί σύνδεσμοι 
  Συλλογή ελληνικών γραμματοσειρών για X Window System που περιλαμβάνει και unicode γραμματοσειρές
 The Unicode Consortium
 Unicode versions: 3.1, 3.2, 4.0, 4.0.1, 4.1
 new characters, scripts and characters and scripts under investigation
 Code Charts (PDF)
 Table of Unicode characters from 1 to 65535 
 UTF-8, UTF-16, UTF-32 Code Charts and a character map (JavaScript)
 The Letter Database Uses forms to present groups in list or grid format by hexadecimal.
 Example text files using Unicode
  Unicode special character map is similar to the Windows version. Click a symbol to obtain either the named or numeric code for HTML.
 ConScript Unicode Registry a project to standardize part of the Private Use Area for use with artificial scripts and artificial languages.  An explanation of how to propose character names in Unicode is available here.
 The secret life of Unicode  "A peek at Unicode's soft underbelly" Describes problems requiring resolution.  Includes links to Unicode resources.
 Tim Bray's Characters vs Bytes explains how the different encodings work.
 Alan Wood's Unicode Resources Contains lists of word processors with Unicode capability; fonts and characters are grouped by type; characters are presented in lists, not grids.
 The strongest denunciation of Unicode, and a response to it
 Software engineering:
 International Components for Unicode (ICU) An open source set of libraries that provide robust and full-featured Unicode services for your applications on a wide variety of platforms.
 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky of JoelonSoftware.com (this is now outdated, but still a reasonable starting point).
 Freedesktop.Org's Project UTF-8's purpose is to document and promote proper Unicode support in free and Open Source software.
 Supplementary Characters in the Java Platform from Sun Microsystems
 Seeing the entirety of Unicode printed out as a single large poster gives a good feel for the size of the code.

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