Τι είναι η κωδικοποίηση χαρακτήρων
Μια κωδικοποίηση είναι μια συμφωνία: «ο αριθμός 65 σημαίνει το γράμμα A». Όταν γράφετε ένα κείμενο, το πρόγραμμα αποθηκεύει αυτούς τους αριθμούς· όταν το ανοίξει κάποιος άλλος, το πρόγραμμά του τους μεταφράζει ξανά σε γράμματα με την ίδια συμφωνία. Αν οι δύο δεν χρησιμοποιούν τον ίδιο πίνακα, το κείμενο βγαίνει λάθος.
Πρέπει να ξεχωρίσετε δύο ιδέες. Η μία είναι το σύνολο χαρακτήρων, η λίστα με το ποιοι αριθμοί αντιστοιχούν σε ποια σύμβολα. Η άλλη είναι πώς αυτοί οι αριθμοί αποθηκεύονται σε byte. Στο ASCII τα δύο συμπίπτουν με τετριμμένο τρόπο· στο Unicode όχι, και εκεί μπαίνει το UTF-8.
ASCII: 128 χαρακτήρες των 7 bit
Το ASCII (αρχικά του American Standard Code for Information Interchange) τυποποιήθηκε τη δεκαετία του 1960. Χρησιμοποιεί 7 bit, δηλαδή 2 στη δύναμη 7 = 128 κωδικούς, από 0 έως 127. Από αυτούς, 33 είναι χαρακτήρες ελέγχου (από 0 έως 31 και το 127) και 95 είναι εκτυπώσιμοι (από 32 έως 126, συμπεριλαμβανομένου του κενού).
Δεν περιλαμβάνει γράμματα με τόνο, ούτε το ñ, ούτε το σύμβολο του ευρώ: σχεδιάστηκε για τα αγγλικά. Αυτό εξηγεί γιατί χρειάστηκαν αργότερα άλλοι πίνακες.
| Χαρακτήρας ελέγχου | Δεκαδικό | Δεκαεξαδικό | Δυαδικό (7 bit) | Σε τι χρησιμεύει |
|---|---|---|---|---|
| Κενός (NUL) | 0 | 00 | 0000000 | Σημαίνει το τέλος μιας συμβολοσειράς σε διάφορες γλώσσες |
| Οριζόντια στηλοθέτηση (TAB) | 9 | 09 | 0001001 | Πηγαίνει στην επόμενη στηλοθέτηση |
| Αλλαγή γραμμής (LF) | 10 | 0A | 0001010 | Κατεβαίνει στην επόμενη γραμμή |
| Επιστροφή carriage (CR) | 13 | 0D | 0001101 | Επιστρέφει στην αρχή της γραμμής |
| Escape (ESC) | 27 | 1B | 0011011 | Ξεκινά ακολουθίες ελέγχου |
| Διάστημα | 32 | 20 | 0100000 | Ο πρώτος εκτυπώσιμος χαρακτήρας |
| Διαγραφή (DEL) | 127 | 7F | 1111111 | Διαγράφει τον χαρακτήρα |
Σχέσεις που αξίζει να θυμάστε
Ο πίνακας δεν είναι ταξινομημένος στην τύχη. Με λίγες κανονικότητες μπορείτε να διαβάζετε κωδικούς απέξω.
- Τα ψηφία από το «0» έως το «9» καταλαμβάνουν τους κωδικούς 48 έως 57 (30 έως 39 σε δεκαεξαδικό). Η τιμή ενός ψηφίου είναι ο κωδικός του μείον 48: το «7» είναι 55, και 55 − 48 = 7.
- Τα κεφαλαία πάνε από το 65 («A») έως το 90 («Z») και τα πεζά από το 97 («a») έως το 122 («z»).
- Η διαφορά ανάμεσα σε ένα κεφαλαίο και το πεζό του είναι πάντα 32: «A» = 65 και «a» = 97· «C» = 67 και «c» = 99. Στο δυαδικό αλλάζει μόνο ένα bit: 01000001 για το «A» και 01100001 για το «a».
- Για να βρείτε τη θέση ενός κεφαλαίου στο αλφάβητο, αφαιρέστε 64: το «C» είναι 67 και 67 − 64 = 3, το τρίτο γράμμα.
- Επειδή όλα τα κεφαλαία (65 έως 90) έχουν κωδικούς μικρότερους από τα πεζά (97 έως 122), μια αλφαβητική ταξινόμηση «κατά κωδικό» βάζει το «Zebra» πριν από το «apple». Πολλά προγράμματα χρειάζονται ξεχωριστή επιλογή σύγκρισης για να ταξινομούν σωστά.
Τέλος γραμμής: LF, CR και CRLF
Μια αλλαγή γραμμής φαίνεται κάτι απλό, αλλά γράφεται διαφορετικά ανάλογα με το σύστημα. Το Unix, το Linux και το macOS χρησιμοποιούν έναν μόνο χαρακτήρα, το LF (10). Τα Windows χρησιμοποιούν δύο διαδοχικούς, CR και LF (13 και 10), γνωστούς ως CRLF. Οι παλιοί τηλεγραφικοί εκτυπωτές χρειάζονταν δύο διαφορετικές εντολές: να επιστρέψει το carriage στην αρχή και να προχωρήσει το χαρτί μία γραμμή.
Αυτή η διαφορά είναι η αιτία για αρχεία που φαίνονται όλα σε μία γραμμή σε έναν βασικό επεξεργαστή, ή με ένα περίεργο σύμβολο στο τέλος κάθε σειράς. Αν ψάχνετε ποιον κωδικό έχει καθένα, γράψτε LF ή CR στην αναζήτηση του πίνακα ASCII.
Το «εκτεταμένο ASCII» δεν είναι πρότυπο
Επειδή ένα byte έχει 8 bit και το ASCII χρησιμοποιεί μόνο 7, περίσσευαν 128 ελεύθεροι κωδικοί (από 128 έως 255) και κάθε κατασκευαστής και περιοχή τους γέμισε με τον δικό της τρόπο. Αυτό είναι γνωστό ως «εκτεταμένο ASCII», αλλά δεν υπάρχει ένας μοναδικός πίνακας: υπάρχουν πολλοί, που λέγονται σελίδες κωδικών. Δύο από τις πιο γνωστές είναι η Latin-1 (ISO-8859-1), όπου το é είναι ο κωδικός 233, και η Windows-1252, παρόμοια αλλά με διαφορές στους κωδικούς 128 έως 159 (εκεί βρίσκεται, για παράδειγμα, το ευρώ).
Το πρόβλημα είναι ότι ο κωδικός 233 σημαίνει «é» σε έναν πίνακα και κάτι άλλο σε έναν άλλο. Ένα κείμενο γραμμένο με έναν πίνακα και διαβασμένο με άλλον έδειχνε σκουπίδια. Το Unicode γεννήθηκε για να βάλει τέλος σε αυτό το χάος.
Unicode και UTF-8
Το Unicode αντιστοιχίζει έναν μοναδικό αριθμό, που λέγεται σημείο κώδικα, σε κάθε χαρακτήρα σχεδόν όλων των συστημάτων γραφής του κόσμου, καθώς και σε σύμβολα και emoji. Σήμερα έχει πάνω από 150.000 χαρακτήρες. Γράφεται με το πρόθεμα U+ και σε δεκαεξαδικό: το «A» είναι U+0041, το «ñ» είναι U+00F1, το ευρώ είναι U+20AC και το emoji του χαμογελαστού προσώπου είναι U+1F600. Τα πρώτα 128 σημεία κώδικα είναι ακριβώς αυτά του ASCII.
Το UTF-8 είναι ο πιο διαδεδομένος τρόπος αποθήκευσης αυτών των αριθμών σε byte, και χρησιμοποιεί από 1 έως 4 ανάλογα με τον χαρακτήρα. Οι 128 του ASCII καταλαμβάνουν ένα μόνο byte, πανομοιότυπο με το παλιό, άρα ένα κείμενο ASCII είναι και έγκυρο κείμενο UTF-8. Οι υπόλοιποι καταλαμβάνουν περισσότερα byte.
| Χαρακτήρας | Σημείο κώδικα | Byte σε UTF-8 | Byte (δεκαεξαδικό) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Γιατί εμφανίζεται «Ã±» αντί για «ñ»
Είναι το πιο συχνό σφάλμα και έχει ακριβή εξήγηση. Το ñ σε UTF-8 είναι δύο byte: C3 και B1. Αν ένα πρόγραμμα πιστεύει ότι το κείμενο είναι σε Latin-1, διαβάζει κάθε byte ως έναν χαρακτήρα: το C3 είναι «Ã» και το B1 είναι «±». Αποτέλεσμα: «Ã±». Το ίδιο συμβαίνει με το «é», που φαίνεται ως «Ã©», και με το «canción», που εμφανίζεται ως «canción».
Η λύση σχεδόν πάντα είναι να πείτε στο πρόγραμμα να ανοίξει το αρχείο ως UTF-8 (σε έναν επεξεργαστή κειμένου ή στις ρυθμίσεις εισαγωγής ενός υπολογιστικού φύλλου). Όταν συμβαίνει το αντίθετο, κείμενο σε Latin-1 διαβασμένο ως UTF-8, συνήθως εμφανίζονται ρόμβοι με ένα ερωτηματικό, επειδή αυτά τα μεμονωμένα byte δεν σχηματίζουν έγκυρες ακολουθίες UTF-8.
Πώς να χρησιμοποιήσετε τον πίνακα ASCII και τον μετατροπέα
Το εργαλείο «Πίνακας ASCII» δείχνει τους 128 χαρακτήρες με τον κωδικό τους σε δεκαδικό, δεκαεξαδικό, οκταδικό και δυαδικό, και το όνομα αυτών του ελέγχου.
- Γράψτε στην αναζήτηση έναν χαρακτήρα, έναν κωδικό ή το όνομα ενός χαρακτήρα ελέγχου (για παράδειγμα A, 65, 41 ή LF) για να βρείτε τη γραμμή του.
- Χρησιμοποιήστε τα κουμπιά φίλτρου (Έλεγχος, Ψηφία, Κεφαλαία, Πεζά, Σύμβολα) για να δείτε μόνο μία ομάδα.
- Για μετατροπή, γράψτε ένα κείμενο στο «Κείμενο» και επιλέξτε τη μορφή (δεκαδικός, δεκαεξαδικός, οκταδικός ή δυαδικός): από κάτω εμφανίζονται οι κωδικοί. Το «Hola» δίνει 72 111 108 97 σε δεκαδικό και 48 6F 6C 61 σε δεκαεξαδικό.
- Μπορείτε να το κάνετε και αντίστροφα: επικολλήστε κωδικούς χωρισμένους με κενά ή κόμματα στο «Κωδικοί» και σχηματίζεται το κείμενο. Στο δεκαεξαδικό γίνονται δεκτά προθέματα όπως 0x41.
Αν το κείμενο έχει χαρακτήρες που δεν είναι ASCII, όπως το ñ, το εργαλείο το επισημαίνει και δείχνει τον κωδικό Unicode του. Για να δείτε τα πραγματικά byte σε UTF-8 χρησιμοποιήστε το «Κείμενο σε δυαδικό»: το ñ δίνει 11000011 10110001, δύο byte των 8 bit. Τα όρια: ο πίνακας δείχνει μόνο το βασικό ASCII, όχι το εκτεταμένο, και όλα υπολογίζονται στο πρόγραμμα περιήγησής σας χωρίς να στέλνεται το κείμενο σε κανέναν διακομιστή.
Συχνές ερωτήσεις
Πόσους χαρακτήρες έχει το ASCII;
128, με κωδικούς από 0 έως 127 και 7 bit ο καθένας. Από αυτούς, 33 είναι χαρακτήρες ελέγχου και 95 είναι εκτυπώσιμοι, μετρώντας το κενό.
Ποιος είναι ο κωδικός ASCII του γράμματος A και του a;
Το «A» είναι 65 (41 σε δεκαεξαδικό, 01000001 σε δυαδικό) και το «a» είναι 97 (61 σε δεκαεξαδικό, 01100001 σε δυαδικό). Διαφέρουν πάντα κατά 32.
Ποια είναι η διαφορά ανάμεσα στο ASCII και στο Unicode;
Το ASCII έχει 128 χαρακτήρες σχεδιασμένους για τα αγγλικά. Το Unicode έχει πάνω από 150.000, από σχεδόν όλες τις γλώσσες και τα emoji, και οι πρώτοι 128 είναι ίδιοι με του ASCII.
Τι είναι το UTF-8;
Είναι ο πιο διαδεδομένος τρόπος αποθήκευσης κειμένου Unicode σε byte. Χρησιμοποιεί 1 έως 4 byte ανά χαρακτήρα: οι χαρακτήρες του ASCII καταλαμβάνουν ένα, ένα ñ καταλαμβάνει δύο και ένα emoji τέσσερα.
Γιατί το κείμενό μου δείχνει «Ã±» ή «Ã©»;
Επειδή ένα κείμενο αποθηκευμένο σε UTF-8 διαβάζεται ως Latin-1. Ανοίξτε το αρχείο δηλώνοντας την κωδικοποίηση UTF-8 και διορθώνεται.