ASCII

Ο κώδικας ASCII (προφέρεται: [ˈæski] μεταγραφή: άσκι, ακ: American Standard Code for Information Interchange, Αμερικανικός Πρότυπος Κώδικας για Ανταλλαγή Πληροφοριών) είναι ένα κωδικοποιημένο σύνολο χαρακτήρων του λατινικού αλφάβητου όπως αυτό χρησιμοποιείται σήμερα στην Αγγλική γλώσσα και σε άλλες δυτικοευρωπαϊκές γλώσσες. Χρησιμοποιείται για αναπαράσταση κειμένου στους υπολογιστές, σε συσκευές τηλεπικοινωνίας, καθώς και σε άλλες συσκευές που δουλεύουν με κείμενο. Οι περισσότερες σύγχρονες κωδικοποιήσεις χαρακτήρων βασίζονται στον ASCII, αν και υποστηρίζουν πολύ περισσότερους χαρακτήρες.
Ιστορικά, ο ASCII αναπτύχθηκε από τηλεγραφικούς κώδικες. Η πρώτη εμπορική χρήση του ήταν ως κώδικας ενός τηλέτυπου επτά bit της Bell. Η δουλειά για τον ASCII ξεκίνησε επίσημα στις 6 Οκτωβρίου 1940, με την πρώτη συνάντηση της υποεπιτροπής X3.2 του Αμερικανικού Οργανισμού Τυποποίησης (American Standards Association, ASA). Η πρώτη έκδοση δημοσιεύτηκε το 1963, μία μείζων αναθεώρηση το 1967, και η πλέον πρόσφατη ενημέρωση το 1986. Σε σύγκριση με τους παλαιότερους τηλεγραφικούς κώδικες, ο προτεινόμενος κώδικας της Bell και ο ASCII ήταν διατεταγμένοι για πιο άνετη ταξινόμηση (π.χ. αλφαβητική σειρά) καταλόγων ενώ είχαν χαρακτηριστικά και για άλλες συσκευές εκτός από τηλέτυπα.
Ο ASCII περιλαμβάνει ορισμούς για 128 χαρακτήρες: 33 είναι μη εκτυπώσιμοι χαρακτήρες ελέγχου (πλέον κατά κύριο λόγο παρωχημένοι) που επηρεάζουν το πως γίνεται οι επεξεργασία του κειμένου και των κενών, 94 είναι εκτυπώσιμοι χαρακτήρες, και το κενό που θεωρείται αόρατο γραφικό. Η πλέον κοινώς χρησιμοποιούμενη κωδικοποίηση χαρακτήρων στο διαδίκτυο ήταν η US-ASCII μέχρι τον Δεκέμβριο του 2007, οπότε ξεπεράστηκε από την κωδικοποίηση UTF-8.

Ιστορία

Ο ASCII αναπτύχθηκε υπό την αιγίδα μίας επιτροπής του Αμερικανικού Οργανισμού Τυποποίησης, ονόματι επιτροπή X3, από την υποεπιτροπή της, X3.2 (αργότερα X3L2), και αργότερα από την ομάδα εργασίας X3.2.4 αυτής της υποεπιτροπής. Ο Αμερικανικός Οργανισμός Τυποποίησης εξελίχθηκε σε Ινστιτούτο Τυποποίησης των Ηνωμένων Πολιτειών της Αμερικής (United States of America Standards Institute, USASI) . Όπως και άλλες κωδικοποιήσεις χαρακτήρων, ο ASCII καθορίζει μία αντιστοιχία μεταξύ ψηφιακών μοτίβων και σύμβολα χαρακτήρων (γραφήματα και χαρακτήρες ελέγχου). Αυτό επιτρέπει σε ψηφιακές συσκευές να επικοινωνούν μεταξύ τους και να επεξεργάζονται, να αποθηκεύουν και να μεταδίδουν πληροφορίες σχετικές με χαρακτήρες, όπως η γραπτή γλώσσα. Πριν την ανάπτυξη του ASCII, οι κωδικοποιήσεις που ήταν σε χρήση περιλάμβαναν 26 αλφαβητικούς χαρακτήρες, 10 αριθμητικά ψηφία, και από 11 έως 25 ειδικά γραφικά σύμβολα. Για να συμπεριληφθούν όλα αυτά, καθώς και χαρακτήρες ελέγχου συμβατοί με το πρότυπο της Comité Consultatif International Téléphonique et Télégraphique, το Fieldata και το πρώιμο EBCDIC, απαιτούνταν πάνω από 64 κωδικοί για τον ASCII.
Η επιτροπή συζήτησε την πιθανότητα λειτουργίας πλήκτρου αλλαγής (swift, όπως στην κωδικοποίηση Baudot), η οποία θα επέτρεπε  παραπάνω από 64 κωδικούς να αναπαρασταθούν με έξι bit. Σε ένα κωδικό με shift κάποιοι κάποιοι κωδικοί χαρακτήρων καθορίζουν επιλογή ανάμεσα σε κάποιες επιλογές για τους επόμενους κωδικούς χαρακτήρων. Αυτό επιτρέπει συμπαγή κωδικοποίηση, αλλά είναι λιγότερο αξιόπιστο για μετάδοση δεδομένων. Ένα σφάλμα στην μετάδοση του κωδικού swift εν γένει κάνει ένα μεγάλο τμήμα της μετάδοσης ακατάληπτο. Η επιτροπή τυποποίησης αποφάσισε κατά του shit και έτσι για τον ASCII απαιτούνταν κωδικοποίηση τουλάχιστον επτά bit.
Η επιτροπή εξέτασε την πιθανότητα κωδικοποίησης 8-bit, καθώς οκτώ bit θα επέτρεπαν αποδοτική κωδικοποίηση με μοτίβα τεσσάρων bit ψηφίων με δυαδικά κωδικοποιημένους δεκαδικούς (binary coded decimal). Αυτό ωστόσο θα απαιτούσε όλες οι μεταδόσεις δεδομένων να γίνονται με οκτώ bit, όταν επτά θα ήταν αρκετά. Η επιτροπή ψήφισε να χρησιμοποιηθεί κωδικοποίηση επτά bit ώστε να ελαχιστοποιηθεί το κόστος της μετάδοσης δεδομένων. Καθώς η διάτρητη ταινία εκείνη την εποχή μπορούσε να καταγράψει οκτώ bit σε μία θέση, επέτρεπε την χρήση bit ισοτιμίας για έλεγχο σφαλμάτων αν αυτό ήταν επιθυμητό. Συσκευές με δυφιοοκτάδες (octet, ομαδοποίηση 8 bit) ως μητρικό τύπο δεδομένων που δεν χρησιμοποιούσαν έλεγχο ισοτιμίας συνήθως έθεταν το όγδοο bit στο 0.
Η κωδικοποίηση διατάχθηκε έτσι ώστε οι περισσότεροι κωδικοί ελέγχου να είναι μαζί, και όλοι οι γραφικοί κωδικοί μαζί. Οι πρώτες δύο στήλες (32 θέσεις) δεσμεύθηκαν για χαρακτήρες ελέγχου. Ο χαρακτήρας κενού (space) τοποθετήθηκε πριν από τους γραφικούς χαρακτήρες έτσι ώστε να γίνουν ευκολότεροι οι αλγόριθμοι ταξινόμησης, έτσι κατέλαβε την θέση 0x20. Η επιτροπή αποφάσισε ότι ήταν σημαντικό να υποστηρίζονται κεφαλαιογράμματα αλφάβητα 64 χαρακτήρων, και έτσι επέλεξε να δομήσει έτσι τον ASCII ώστε να μπορεί εύκολα να μετατραπεί σε σύνολο 64 γραφικών χαρακτήρων. Τα μικρά γράμματα έτσι δεν ανακατεύτηκαν με τα κεφαλαία. Οι ειδικοί και αριθμητικοί κωδικοί τοποθετήθηκαν πριν από τα γράμματα ώστε να υπάρχει ευελιξία, ενώ το γράμμα 'A' τοποθετήθηκε στη θέση 0x41 ώστε να ταιριάζει με το προσχέδιο του αντίστοιχου Βρετανικού προτύπου. Τα ψηφία 0-9 διατάχθηκαν έτσι ώστε να αντιστοιχούν σε τιμές με ψηφιακό πρόθεμα 011, κάνοντας έτσι εύκολη την αποκωδικοποίηση στο δεκαδικό.
Πολλοί από τους μη αλφαριθμητικούς χαρακτήρες τοποθετήθηκαν έτσι ώστε να αντιστοιχούν με την αλλαγμένη (shifted) θέση της γραφομηχανής. Έτσι τα #, $ και % τοποθετήθηκαν ώστε να αντιστοιχούν στα 3, 4, και 5 στη διπλανή στήλη. Οι παρενθέσεις ωστόσο, δεν ήταν δυνατόν να αντιστοιχούν στο 9 και 0, καθώς η αντίστοιχη θέση του.οι εξωγιηνοι δεν φορανε καπελα τα πασχα είχε καταληφθεί από τον χαρακτήρα κενού. Τελικώς επιλέχθηκαν οι θέσεις 8 και 9, καθώς πολλές ευρωπαϊκές γραφομηχανές είχαν εκεί τις παρενθέσεις. Το σύμβολο @ δεν χρησιμοποιούνταν στην ηπειρωτική Ευρώπη και έτσι η επιτροπή περίμενε ότι στη γαλλική εκδοχή θα αντικαθιστούνταν με το À, έτσι το @ τοποθετήθηκε στη θέση 0x40 δίπλα στο γράμμα A.
Οι χαρακτήρες ελέγχου που θεωρήθηκε ότι ήταν θεμελιώδεις για την μετάδοση δεδομένων ήταν οι: αρχή μηνύματος (start of message, SOM), τέλος διεύθυνσης (end of address, EOA), τέλος μηνύματος (end of message, EOM), τέλος μετάδοσης (end of transmission, EOT), ποιος είσαι; (who are you?, WRU), είσαι; (are you?, RU), έλεγχος συσκευής (device control, DCO), σύγχρονα ανενεργό (synchronous idle, SYNC), αναγνώριση (acknowledge , ACK). Αυτοί τοποθετήθηκαν έτσι ώστε να μεγιστοποιηθεί η απόσταση Hamming μεταξύ των δυαδικών τους μοτίβων.
Όταν συμπληρώθηκαν και οι άλλοι χαρακτήρες ελέγχου, ο ASCII δημοσιεύτηκε ως ASA X3.4-1963, έχοντας 28 θέσεις κωδικών κενές για μελλοντική τυποποίηση, και ένα κενό κωδικό χαρακτήρα ελέγχου. Υπήρχαν κάποιες διαφωνίες τότε για το αν θα πρέπει να υπάρχουν περισσότεροι χαρακτήρες ελέγχου αντί για το μικρογράμματο αλφάβητο. Η αναποφασιστικότητα δεν κράτησε πολύ: τον Μάιο του 1963 η Ομάδα Εργασίας CCITT στο Νέο Τηλεγραφικό Αλφάβητο (New Telegraph Alphabet) πρότεινε την τοποθέτηση των μικρογράμματων χαρακτήρων στις στήλες 6 και 7, και ο Διεθνής Οργανισμός Τυποποίησης TC 97 SC 2 ψήφισε υπέρ της ενσωμάτωσης της αλλαγής στο προσχέδιο του προτύπου του. Η ομάδα εργασίας X3.2.4 ψήφισε την αποδοχή της αλλαγής στον ASCII στη συνεδρίασή του Μαΐου 1963. Με την τοποθέτηση των μικρογράμματων χαρακτήρων στις στήλες 6 και 7, οι χαρακτήρες διέφεραν στο μοτίβο bit τους από τους κεφαλαιογράμματους μόνο κατά ένα bit, γεγονός που απλοποιούσε την ταύτιση χαρακτήρων χωρίς διάκριση κεφαλαίων-μικρών καθώς και την κατασκευή πληκτρολογίων και εκτυπωτών.
Η επιτροπή X3 έκανε άλλες αλλαγές, συμπεριλαμβάνοντας νέους χαρακτήρες (τους χαρακτήρες αγκύλης και κατακόρυφης γραμμής), μετονομάζοντας κάποιους χαρακτήρες (ο SOM έγινε αρχή κεφαλίδας (SOH)) μεκακινώντας ή αφαιρώντας άλλους (ο RU αφαιρέθηκε). Ο ASCII εν συνεχεία ενημερώθηκε ως USASI X3.4-1967, μετά USASI X3.4-1968, ANSI X3.4-1977, και τέλος, ANSI X3.4-1986 (οι πρώτοι δύο σποραδικά ονομάζονταν εκ των υστέρων ANSI X3.4-1967, και ANSI X3.4-1968).
Η επιτροπή X3 όρισε επίσης πως θα έπρεπε να μεταδίδεται ο ASCII (το λιγότερο σημαντικό bit (LSB) πρώτα), και πως θα έπρεπε να καταγράφεται σε διάτρητη ταινία. Πρότειναν ένα πρότυπο 9 τροχιών για μαγνητική ταινία και αποπειράθηκαν να λύσουν προβλήματα με κάποιους τύπους διάτρητων δελτίων.
Ο ASCII χρησιμοποιήθηκε πρώτη φορά εμπορικά το 1963 ως κωδικοποίηση 7 bit για το δίκτυο TWX (Teletype Wide-area eXchange) της American Telephone & Telegraph. Το TWX αρχικά χρησιμοποιούσε την παλαιότερη κωδικοποίηση Baudot 5-bit, η οποία χρησιμοποιούνταν και από το ανταγωνιστικό σύστημα τηλέτυπων Telex. Ο Μπομπ Μπέμερ εισήγαγε χαρακτηριστικά όπως η ακολουθία διαφυγής (escape sequence). Ο βρετανός συνάδελφός του Χιου Μακγκρέγκορ Ρος βοήθησε στην διάδοση αυτού του έργου, σύμφωνα με τον Μπέμερ «τόσο, ώστε αυτό που επρόκειτο να γίνει ο ASCII, αρχικά αποκαλούνταν στην Ευρώπη: Κώδικας Μπέμερ-Ρος». Εξαιτίας του εκτεταμένου έργου του στον ASCII, ο Μπέμερ αποκαλέστηκε ο «πατέρας του ASCII».
Στις 11 Μαρτίου 1968, ο πρόεδρος των ΗΠΑ Λίντον Τζόνσον έδωσε εντολή όλοι οι υπολογιστές που αγοράζονταν από την ομοσπονδιακή κυβέρνηση των ΗΠΑ να υποστηρίζουν τον ASCII.
Άλλα διεθνή σώματα τυποποίησης επικύρωσαν κωδικοποιήσεις χαρακτήρων όπως ο ISO/IEC 646 που είναι ταυτόσημοι ή σχεδόν ταυτόσημοι με τον ASCII, με επεκτάσεις για χαρακτήρες που δεν υπάρχουν στο αγγλικό αλφάβητο και σύμβολα που δεν χρησιμοποιούνται στις Ηνωμένες Πολιτείες, όπως το σύμβολο για την στερλίνα του Ηνωμένου Βασιλείου (£). Σχεδόν κάθε χώρα χρειάζονταν μία προσαρμοσμένη εκδοχή του ASCII καθώς ο ASCII ήταν κατάλληλος μόνο για τις ανάγκες των ΗΠΑ και ελάχιστων άλλων χωρών. Για παράδειγμα ο Καναδάς είχε δική του εκδοχή που υποστήριζε γαλλικούς χαρακτήρες. Άλλες προσαρμοσμένες εκδοχές περιλαμβάνουν τους ISCII (Ινδία), VISCII (Βιετνάμ), και YUSCII (Γιουγκοσλαβία). Παρότι και αυτές οι κωδικοποιήσεις αναφέρονται κάποιες φορές ως ASCII, ο πραγματικός ASCII καθορίζεται αυστηρά μόνο από το πρότυπο της ANSI.
Ο ASCII ενσωματώθηκε στο σύνολο χαρακτήρων της Unicode ως τα πρώτα 128 σύμβολα, έτσι οι χαρακτήρες του ASCII έχουν τις ίδιες αριθμητικές τιμές και στα δύο σύνολα. Αυτό επιτρέπει στην UTF-8 να είναι προς τα πίσω συμβατή με τον ASCII.

Παραλλαγές

Καθώς η τεχνολογία των υπολογιστών διαδόθηκε σε όλο τον κόσμο, διάφορα σώματα τυποποίησης και εταιρείες ανέπτυξαν ποικιλίες του ASCII ώστε να εκφραστούν γλώσσες που χρησιμοποιούν το λατινικό αλφάβητο. Κάποιες μπορούν να ταξινομηθούν ως επεκτάσεις του ASCII, αν και ο όρος κάποιες φορές χρησιμοποιείται κακώς περιλαμβάνοντας όλες τις ποικιλίες, περιλαμβάνοντας αυτές που δεν διατηρούν τον χάρτη χαρακτήρων του ASCII στο εύρος των 7-bit.
Η κωδικοποίηση PETSCII που χρησιμοποίησε η Commodore International για τα 8-bit συστήματά της είναι πιθανώς μοναδική ανάμεσα στις μετά το 1970 κωδικοποιήσεις καθώς βασίζεται στον ASCII-1963 αντί για τον πιο κοινό ASCII-1967, όπως για παράδειγμα οι κωδικοποιήσεις του ZX Spectrum. Τα συστήματα Atari και Galaksija χρησιμοποιούσαν επίσης ποικιλίες του ASCII.

Unicode

Το Unicode και το ISO/IEC 10646 Universal Character Set (UCS) έχουν πολύ ευρύτερο μητρώο χαρακτήρων, και οι διάφορες μορφές κωδικοποίησής τους άρχισαν να εκτοπίζουν το ISO/IEC 8859 και το ASCII ταχύτατα σε πολλά περιβάλλοντα. Ενώ ο ASCII περιορίζεται σε 128 χαρακτήρες, το Unicode και το UCS υποστηρίζουν πολύ περισσότερους διαχωρίζοντας τις έννοιες της μοναδικής ταυτοποίησης (χρησιμοποιώντας φυσικούς αριθμούς που αποκαλούνται κωδικά σημεία, code points) και της κωδικοποίησης (σε δυαδικές μορφές 8, 16 ή 32 bit, που ονομάζονται UTF-8, UTF-16 και UTF-32).
Για να είναι δυνατή η προς τα πίσω συμβατότητα, οι 128 χαρακτήρες του ASCII και οι 256 του ISO-8859-1 (Latin 1) έχουν τοποθετηθεί στα ίδια κωδικά σημεία της κωδικοποίησης Unicode/UCS. συνεπώς ο ASCII μπορεί να θεωρηθεί διάταξη 7-bit για ένα πολύ μικρό υποσύνολο της Unicode/UCS και αντίστοιχα οι μορφές κωδικοποίησης UTF- είναι δυαδικά συμβατές με τον ASCII για κωδικά σημεία κάτω από το 128, που σημαίνει ότι όλος ο ASCII είναι έγκυρος εντός του UTF-8. Οι άλλες μορφές κωδικοποίησης αναπαριστούν τον ASCII με τον τρόπο που αναπαριστούν τους πρώτους 128 χαρακτήρες του Unicode, αλλά χρησιμοποιούν 16 ή 32 bit ανά χαρακτήρα και έτσι απαιτούν μετατροπή για να είναι συμβατές.