Χρησιμοποιείται το ποσοστό των κωδικοποιήσεων χαρακτήρων στο unicode. Unicode: πρότυπο κωδικοποίησης χαρακτήρων

Παιδικά προϊόντα 02.05.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Το Unicode (Unicode στα Αγγλικά) είναι ένα πρότυπο κωδικοποίησης χαρακτήρων. Με απλά λόγια, αυτός είναι ένας πίνακας αντιστοιχίας μεταξύ χαρακτήρων κειμένου ( , γράμματα, στοιχεία στίξης) δυαδικοί κώδικες. Ο υπολογιστής κατανοεί μόνο την ακολουθία των μηδενικών και των μονάδων. Για να γνωρίζει τι ακριβώς πρέπει να εμφανίζει στην οθόνη, είναι απαραίτητο να εκχωρήσετε σε κάθε χαρακτήρα τον δικό του μοναδικό αριθμό. Στη δεκαετία του ογδόντα, οι χαρακτήρες κωδικοποιούνταν σε ένα byte, δηλαδή οκτώ bit (κάθε bit είναι 0 ή 1). Έτσι, αποδείχθηκε ότι ένας πίνακας (γνωστός και ως κωδικοποίηση ή σετ) μπορεί να φιλοξενήσει μόνο 256 χαρακτήρες. Αυτό μπορεί να μην είναι αρκετό ούτε για μία γλώσσα. Ως εκ τούτου, εμφανίστηκαν πολλές διαφορετικές κωδικοποιήσεις, η σύγχυση με την οποία συχνά οδηγούσε στο γεγονός ότι αντί για ευανάγνωστο κείμενοεμφανίστηκαν μερικά παράξενα μικρά πλάσματα. Υποχρεούμαι ενιαίο πρότυπο, που έγινε το Unicode. Η πιο χρησιμοποιούμενη κωδικοποίηση είναι το UTF-8 (Unicode Transformation Format), το οποίο χρησιμοποιεί 1 έως 4 byte για να αναπαραστήσει έναν χαρακτήρα.

Σύμβολα

Οι χαρακτήρες στους πίνακες Unicode είναι αριθμημένοι δεκαεξαδικούς αριθμούς. Για παράδειγμα, κυριλλικό κεφαλαίο γράμμαΤο M χαρακτηρίζεται U+041C. Αυτό σημαίνει ότι βρίσκεται στη διασταύρωση της γραμμής 041 και της στήλης C. Μπορείτε απλά να το αντιγράψετε και μετά να το επικολλήσετε κάπου. Για να μην ψάξετε σε μια λίστα πολλών χιλιομέτρων, θα πρέπει να χρησιμοποιήσετε την αναζήτηση. Όταν μεταβείτε στη σελίδα συμβόλων, θα δείτε τον αριθμό του στο Unicode και τον τρόπο με τον οποίο είναι γραμμένος διαφορετικές γραμματοσειρές. Μπορείτε να εισαγάγετε το ίδιο το σύμβολο στη γραμμή αναζήτησης, ακόμα κι αν αντ' αυτού έχει σχεδιαστεί ένα τετράγωνο, τουλάχιστον για να μάθετε τι ήταν. Επίσης, σε αυτόν τον ιστότοπο υπάρχουν ειδικά (και τυχαία) σύνολα εικονιδίων ίδιου τύπου, που συλλέγονται από διαφορετικές ενότητες, για ευκολία στη χρήση.

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

Η ίδια η κοινοπραξία Unicode δεν εφευρίσκει νέους χαρακτήρες. Τα εικονίδια που βρίσκουν τη χρήση τους στην κοινωνία προστίθενται στους πίνακες. Για παράδειγμα, το σύμβολο του ρουβλίου χρησιμοποιήθηκε ενεργά για έξι χρόνια πριν προστεθεί στο Unicode. Τα εικονογράμματα emoji (emoticons) ελήφθησαν επίσης για πρώτη φορά ευρεία εφαρμογήστην Ιαπωνία πριν συμπεριληφθούν στην κωδικοποίηση. Αλλά τα εμπορικά σήματα και τα λογότυπα της εταιρείας δεν προστίθενται κατ' αρχήν. Ακόμη και τέτοια κοινά όπως μήλο Appleή σημαία των Windows. Μέχρι σήμερα, περίπου 120 χιλιάδες χαρακτήρες κωδικοποιούνται στην έκδοση 8.0.

Πρότυπο που προτάθηκε το 1991 μη κερδοσκοπικού οργανισμού"Unicode Consortium" (Αγγλικά: Unicode Consortium, Unicode Inc.). Η χρήση αυτού του προτύπου καθιστά δυνατή την κωδικοποίηση πολύ μεγάλο αριθμόχαρακτήρες από διαφορετικά σενάρια: κινεζικοί χαρακτήρες ενδέχεται να συνυπάρχουν σε έγγραφα Unicode, μαθηματικά σύμβολα, γράμματα Ελληνικό αλφάβητο, Λατινικά και Κυριλλικά και η εναλλαγή σελίδων κώδικα καθίσταται περιττή.

Το πρότυπο αποτελείται από δύο κύριες ενότητες: το καθολικό σύνολο χαρακτήρων (UCS) και την οικογένεια κωδικοποίησης (UTF, μορφή μετασχηματισμού Unicode). Το καθολικό σύνολο χαρακτήρων καθορίζει μια αντιστοιχία ένα προς ένα μεταξύ χαρακτήρων και κωδικών - στοιχεία του χώρου κώδικα που αντιπροσωπεύουν μη αρνητικούς ακέραιους αριθμούς. Μια οικογένεια κωδικοποίησης ορίζει την αναπαράσταση μηχανής μιας ακολουθίας κωδικών UCS.

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

Τύπος χαρακτήρα (κεφαλαίο γράμμα, πεζό γράμμα, αριθμός, σημείο στίξης κ.λπ.)

Χαρακτηριστικά χαρακτήρων (εμφάνιση από αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά, κενό διάστημα, αλλαγή γραμμής κ.λπ.).

Το αντίστοιχο κεφαλαίο ή πεζό γράμμα (για πεζά και κεφαλαία γράμματααντίστοιχα);

Η αντίστοιχη αριθμητική τιμή (για αριθμητικούς χαρακτήρες).

Όλο το εύρος των κωδικών από 0 έως FFFF χωρίζεται σε πολλά τυπικά υποσύνολα, καθένα από τα οποία αντιστοιχεί είτε στο αλφάβητο μιας γλώσσας είτε σε μια ομάδα ειδικών χαρακτήρων που είναι παρόμοιοι στις λειτουργίες τους. Το παρακάτω διάγραμμα περιέχει μια γενική λίστα υποσυνόλων Unicode 3.0 (Εικόνα 2).

Εικόνα 2

Το πρότυπο Unicode είναι η βάση για την αποθήκευση κειμένου σε πολλά σύγχρονα συστήματα υπολογιστών. Ωστόσο, δεν είναι συμβατό με τα περισσότερα πρωτόκολλα Διαδικτύου επειδή οι κώδικές του μπορούν να περιέχουν οποιεσδήποτε τιμές byte και τα πρωτόκολλα συνήθως χρησιμοποιούν byte 00 - 1F και FE - FF ως byte υπηρεσίας. Για να επιτευχθεί συμβατότητα, έχουν αναπτυχθεί πολλές μορφές μετασχηματισμού Unicode (UTF, Unicode Transformation Formats), από τις οποίες το UTF-8 είναι το πιο συνηθισμένο σήμερα. Αυτή η μορφή ορίζει ακολουθώντας τους κανόνεςμετατροπή κάθε κωδικού Unicode σε ένα σύνολο byte (ένα έως τρία) κατάλληλα για μεταφορά μέσω πρωτοκόλλων Διαδικτύου.


Εδώ τα x,y,z δηλώνουν bits πηγαίος κώδικας, το οποίο πρέπει να ανακτηθεί ξεκινώντας από το λιγότερο σημαντικό και να εισαχθεί στα byte αποτελέσματος από δεξιά προς τα αριστερά μέχρι να καλυφθούν όλες οι καθορισμένες θέσεις.

Περαιτέρω ανάπτυξηΤο πρότυπο Unicode σχετίζεται με την προσθήκη νέων γλωσσικών επιπέδων, δηλ. χαρακτήρες στις περιοχές 10000 - 1FFFF, 20000 - 2FFFF, κ.λπ., όπου υποτίθεται ότι περιλαμβάνει κωδικοποίηση για σενάρια νεκρών γλωσσών που δεν περιλαμβάνονται στον παραπάνω πίνακα. Για την κωδικοποίηση αυτών πρόσθετους χαρακτήρεςαναπτύχθηκε νέα μορφή UTF-16.

Υπάρχουν λοιπόν 4 κύριοι τρόποι για την κωδικοποίηση των byte Unicode:

UTF-8: 128 χαρακτήρες κωδικοποιημένοι σε ένα byte (μορφή ASCII), 1920 χαρακτήρες κωδικοποιημένοι σε 2 byte ((Ρωμαϊκά, Ελληνικά, Κυριλλικά, Κοπτικά, Αρμενικά, Εβραϊκά, Αραβικοί χαρακτήρες), 63488 χαρακτήρες κωδικοποιημένοι σε 3 byte (Κινέζικα, Ιαπωνικά κ.λπ. .) Οι υπόλοιποι 2.147.418.112 χαρακτήρες (δεν έχουν χρησιμοποιηθεί ακόμη) μπορούν να κωδικοποιηθούν με 4, 5 ή 6 byte.

UCS-2: Κάθε χαρακτήρας αντιπροσωπεύεται από 2 byte. Αυτή η κωδικοποίηση περιλαμβάνει μόνο τους πρώτους 65.535 χαρακτήρες από τη μορφή Unicode.

UTF-16: Μια επέκταση του UCS-2, περιέχει 1.114.112 χαρακτήρες μορφής Unicode. Οι πρώτοι 65.535 χαρακτήρες αντιπροσωπεύονται από 2 byte, οι υπόλοιποι με 4 byte.

USC-4: Κάθε χαρακτήρας κωδικοποιείται σε 4 byte.

Αυτή η κωδικοποίηση λύνει προβλήματα χρήστη(βλ. παραπάνω), αλλά δημιουργεί νέα, τεχνικά προβλήματα: Πώς να στείλετε χαρακτήρες Unicode χρησιμοποιώντας 1 byte. Οι μονάδες 8-bit είναι οι μικρότερες μεταβιβάσιμες μονάδες στους περισσότερους υπολογιστές και είναι επίσης οι μικρότερες μονάδες που χρησιμοποιούνται σε συνδέσεις δικτύουμε βάση το πρωτόκολλο TCP/IP. Η χρήση 1 byte για την αναπαράσταση 1 χαρακτήρα έγινε επεισόδιο της ιστορίας (το γεγονός ότι εμφανίστηκε μια τέτοια κωδικοποίηση οφείλεται στο γεγονός ότι οι υπολογιστές προέρχονται από την Ευρώπη και τις ΗΠΑ, όπου για μεγάλο χρονικό διάστημα αρκούνταν σε 96 χαρακτήρες).

Υπάρχουν 4 κύριοι τρόποι κωδικοποίησης των byte Unicode:

UTF-8: 128 χαρακτήρες κωδικοποιούνται σε ένα byte (μορφή ASCII), 1920 χαρακτήρες κωδικοποιούνται σε 2 byte ((ρωμαϊκά, ελληνικά, κυριλλικά, κοπτικά, αρμενικά, εβραϊκά, αραβικά), 63488 χαρακτήρες κωδικοποιούνται σε 3 byte (κινέζικα, ιαπωνικά κ.λπ. .) Οι υπόλοιποι 2.147.418.112 χαρακτήρες (δεν έχουν χρησιμοποιηθεί ακόμη) μπορούν να κωδικοποιηθούν σε 4, 5 ή 6 byte.

UCS-2:Κάθε χαρακτήρας αντιπροσωπεύεται από 2 byte. Αυτή η κωδικοποίηση περιλαμβάνει μόνο τους πρώτους 65.535 χαρακτήρες από τη μορφή Unicode.

UTF-16:Μια επέκταση του UCS-2, περιλαμβάνει 1.114.112 χαρακτήρες Unicode. Οι πρώτοι 65.535 χαρακτήρες αντιπροσωπεύονται από 2 byte, οι υπόλοιποι με 4 byte.

USC-4:Κάθε χαρακτήρας κωδικοποιείται σε 4 byte.

Αποδεικνύεται ότι 8 bit χρησιμοποιούνται για την κωδικοποίηση ευρωπαϊκών γλωσσών και για κινέζικα, ιαπωνικά και κορεατικές γλώσσεςπολύ περισσότερο. Αυτό μπορεί να επηρεάσει την ποσότητα του χώρου που καταλαμβάνετε χώρο στο δίσκοκαι την ταχύτητα μετάδοσης του δικτύου. Για τις κύριες κωδικοποιήσεις η εικόνα είναι η εξής (K (%) - αύξηση του χώρου στο δίσκο και μείωση της ταχύτητας μετάδοσης του δικτύου):

UTF-8: καμία αλλαγή για το αμερικανικό ASCII, ελαφρά υποβάθμιση (K = λίγα %) για το ISO-8859-1, K = 50% για τα Κινέζικα, Ιαπωνικά, Κορεάτικα και K = 100% για τα Ελληνικά και τα Κυριλλικά.

UCS-2 και UTF-16: καμία αλλαγή για Κινέζικα, Ιαπωνικά, Κορεάτικα. K=100% για αμερικανικό ASCII, ISO-8859-1, Ελληνικά και Κυριλλικά.

UCS-4: K=100% για Κινέζικα, Ιαπωνικά, Κορεάτικα. K=300% για αμερικανικό ASCII, ISO-8859-1, Ελληνικά και Κυριλλικά.

Ως αποτέλεσμα, αποδεικνύεται ότι η κωδικοποίηση UTF-8 καταλαμβάνει λιγότερο χώρο στο δίσκο και επιτρέπει τη μεταφορά δεδομένων μέσω του δικτύου με υψηλότερες ταχύτητες.

Unicode 3.0

Το πρότυπο Unicode αναπτύχθηκε για τη δημιουργία ενός ενιαίου χαρακτήρα κωδικοποίησης για όλες τις σύγχρονες και πολλές αρχαίες γραπτές γλώσσες. Κάθε χαρακτήρας σε αυτό το πρότυπο κωδικοποιείται με 16 bit, γεγονός που του επιτρέπει να καλύπτει έναν ασύγκριτα μεγαλύτερο αριθμό χαρακτήρων από ό,τι οι κωδικοποιήσεις 7 και 8 bit ήταν αποδεκτές στο παρελθόν. Μια άλλη σημαντική διαφορά μεταξύ του Unicode και άλλων συστημάτων κωδικοποίησης είναι ότι όχι μόνο εκχωρεί έναν μοναδικό κωδικό σε κάθε χαρακτήρα, αλλά καθορίζει επίσης διάφορα χαρακτηριστικά αυτού του χαρακτήρα, για παράδειγμα:

Τύπος χαρακτήρων (κεφαλαίο γράμμα, πεζό γράμμα, αριθμός, σημείο στίξης κ.λπ.).

Χαρακτηριστικά χαρακτήρων (εμφάνιση από αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά, κενό διάστημα, αλλαγή γραμμής κ.λπ.).

Το αντίστοιχο κεφαλαίο ή πεζό γράμμα (για πεζά και κεφαλαία γράμματα, αντίστοιχα).

Η αντίστοιχη αριθμητική τιμή (για αριθμητικούς χαρακτήρες).

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

Ρύζι. 6. Κωδικοποίηση Unicode 3.0.

Μορφή UTF-8: Το πρότυπο Unicode είναι η βάση για την αποθήκευση κειμένου σε πολλά σύγχρονα συστήματα υπολογιστών. Ωστόσο, δεν είναι συμβατό με τα περισσότερα πρωτόκολλα Διαδικτύου επειδή οι κώδικές του μπορούν να περιέχουν οποιεσδήποτε τιμές byte και τα πρωτόκολλα συνήθως χρησιμοποιούν byte 00 - 1F και FE - FF ως byte υπηρεσίας. Για να επιτευχθεί συμβατότητα, έχουν αναπτυχθεί πολλές μορφές μετασχηματισμού Unicode (UTF, Unicode Transformation Formats), από τις οποίες το UTF-8 είναι το πιο συνηθισμένο σήμερα. Αυτή η μορφή ορίζει τους ακόλουθους κανόνες για τη μετατροπή κάθε κώδικα Unicode σε ένα σύνολο byte (ένα έως τρία) κατάλληλα για μεταφορά μέσω πρωτοκόλλων Διαδικτύου.

Εύρος Unicode Δυαδικός κωδικός χαρακτήρων UTF-8 byte (δυαδικό)

0000 - 007F 00000000 0zzzzzzzz 0zzzzzzzz

0080 - 07ffzzzzzzzzzzzzzzzzzzzzzzzz

0800 - FFFF xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz

Εδώ τα x,y,z υποδηλώνουν τα bit του πηγαίου κώδικα που πρέπει να εξαχθούν, ξεκινώντας με το λιγότερο σημαντικό και να εισαχθούν στα byte αποτελέσματος από δεξιά προς τα αριστερά μέχρι να καλυφθούν όλες οι καθορισμένες θέσεις.

Μορφή UTF-16: Η περαιτέρω ανάπτυξη του προτύπου Unicode σχετίζεται με την προσθήκη νέων γλωσσικών επιπέδων, π.χ. χαρακτήρες στις περιοχές 10000 - 1FFFF, 20000 - 2FFFF, κ.λπ., όπου υποτίθεται ότι περιλαμβάνει κωδικοποίηση για σενάρια νεκρών γλωσσών που δεν περιλαμβάνονται στον παραπάνω πίνακα. Μια νέα μορφή, UTF-16, αναπτύχθηκε για την κωδικοποίηση αυτών των πρόσθετων χαρακτήρων. Για το βασικό γλωσσικό επίπεδο, δηλ. για χαρακτήρες με κωδικούς από 0000 έως FFFF, είναι το ίδιο με το Unicode.

KOI-8

KOI-8 (κωδικός ανταλλαγής πληροφοριών, 8 bit), KOI8 - οκτώ bit συμβατό με ASCII κωδικοσελίδα, σχεδιασμένο για την κωδικοποίηση γραμμάτων Κυριλλικά αλφάβητα.

Υπάρχει επίσης μια έκδοση επτά bit της κωδικοποίησης που δεν είναι πλήρως συμβατή με το ASCII - KOI-7. Τα KOI-7 και KOI-8 περιγράφονται στο GOST 19768-74 (τώρα δεν είναι έγκυρα).

Οι προγραμματιστές του KOI-8 τοποθέτησαν σύμβολα του ρωσικού αλφαβήτου στην κορυφή πίνακα κωδικώνμε τέτοιο τρόπο ώστε οι θέσεις Κυριλλικοί χαρακτήρεςαντιστοιχούν στα αντίστοιχα φωνητικά τους στο αγγλικό αλφάβητο στο κάτω μέρος του πίνακα. Αυτό σημαίνει ότι εάν σε ένα κείμενο γραμμένο σε KOI-8 αφαιρεθεί το όγδοο bit κάθε χαρακτήρα, τότε προκύπτει ένα «αναγνώσιμο» κείμενο, αν και είναι γραμμένο με λατινικούς χαρακτήρες. Για παράδειγμα, οι λέξεις "Ρωσικό κείμενο" θα γίνουν "rUSSKIJ tEKST". Κατά συνέπεια, οι κυριλλικοί χαρακτήρες δεν ήταν ταξινομημένοι με αλφαβητική σειρά.

Υπάρχουν πολλές επιλογές κωδικοποίησης KOI-8 για διάφορα κυριλλικά αλφάβητα. Το ρωσικό αλφάβητο περιγράφεται στην κωδικοποίηση KOI8-R, το ουκρανικό - στο KOI8-U.

Το KOI8-R έχει γίνει το de facto πρότυπο για το ρωσικό κυριλλικό αλφάβητο σε λειτουργικά συστήματα και email παρόμοια με το Unix.

ΣΕ Microsoft Windows KOI8-R έχει εκχωρηθεί ο κωδικός σελίδας 20866, KOI8-U - 21866.

Το κάτω μέρος του πίνακα κωδικοποίησης (Λατινικά) αντιστοιχεί πλήρως Κωδικοποίηση ASCII.

Στους παρακάτω πίνακες, οι αριθμοί κάτω από τα γράμματα δείχνουν δεκαεξαδικός κώδικαςγράμματα στο Unicode.

Ρύζι. 7. ΚΟΙ8-Ρ

Ρύζι. 8. KOI8-U

Αποστολές:

1. Μετατροπή ακεραίων σε δεκαδική μορφή:

2. Μετατρέψτε τους πραγματικούς αριθμούς σε δεκαδική μορφή:

1 00011100 10100000000000000000000

0 00001101 11001000000000000000000

101 110 99 111 100 105 110 103

234 238 228 232 240 238 226 234 224

203 207 196 201 210 207 215 203 193

5. Γράψτε την ημερομηνία γέννησής σας (ημέρα, μήνας, έτος) ως σύντομο ακέραιο, μακρύ ακέραιο, συσκευασμένο δεκαδικός αριθμός. Καταγράψτε τους αντίστοιχους αρνητικούς αριθμούς. Ελέγξτε ότι η καταχώριση είναι σωστή.

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

7. Σημειώστε το επώνυμο, το όνομα, το πατρώνυμο σας σε κωδικοποίηση ASCII και KOI8-R.


| | | 4 | | | | | |

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

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

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

Γιατί χρειαζόταν το Unicode;

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

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

Αυτή η προσέγγιση γενικά και οι κωδικοποιήσεις ενός byte ειδικότερα είχαν ορισμένα σημαντικά μειονεκτήματα:

  1. Ήταν δυνατή η ταυτόχρονη εργασία μόνο με 256 χαρακτήρες, με τους πρώτους 128 να προορίζονται για λατινικούς χαρακτήρες και χαρακτήρες ελέγχου, και στο δεύτερο μισό, εκτός από σύμβολα εθνικό αλφάβητοήταν απαραίτητο να βρεθεί μια θέση για ψευδογραφικά σύμβολα (╔ ╗).
  2. Οι γραμματοσειρές ήταν συνδεδεμένες με μια συγκεκριμένη κωδικοποίηση.
  3. Κάθε κωδικοποίηση αντιπροσώπευε το δικό της σύνολο χαρακτήρων και η μετατροπή από τον έναν στον άλλο ήταν δυνατή μόνο με μερικές απώλειες, όταν οι χαρακτήρες που λείπουν αντικαταστάθηκαν με γραφικά παρόμοιους.
  4. Η μεταφορά αρχείων μεταξύ συσκευών με διαφορετικά λειτουργικά συστήματα ήταν δύσκολη. Έπρεπε είτε να έχετε ένα πρόγραμμα μετατροπέα είτε να το μεταφέρετε μαζί με το αρχείο πρόσθετες γραμματοσειρές. Η ύπαρξη του Διαδικτύου όπως ξέρουμε ήταν αδύνατη.
  5. Υπάρχουν μη αλφαβητικά συστήματα γραφής στον κόσμο (ιερογλυφική ​​γραφή), τα οποία κατ' αρχήν δεν μπορούν να αναπαρασταθούν σε κωδικοποίηση ενός byte.

Βασικές αρχές του Unicode

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

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

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

Για παράδειγμα, ο χαρακτήρας Unicode U+041F είναι το κεφαλαίο κυριλλικό γράμμα P. Υπάρχουν διάφοροι τρόποι να αναπαραστήσετε αυτόν τον χαρακτήρα στη μνήμη του υπολογιστή, όπως ακριβώς υπάρχουν πολλές χιλιάδες τρόποι για να τον εμφανίσετε σε μια οθόνη οθόνης. Αλλά ταυτόχρονα P, θα είναι επίσης P ή U+041F στην Αφρική.

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

Αποδεικνύεται ότι, καθοδηγούμενο από το πρότυπο, οποιοδήποτε κείμενο μπορεί να κωδικοποιηθεί ως μια ακολουθία χαρακτήρων Unicode

Γεια σου U+041F U+0440 U+0438 U+0432 U+0435 U+0442
γράψτε το σε ένα κομμάτι χαρτί, συσκευάστε το σε ένα φάκελο και στείλτε το σε οποιοδήποτε μέρος του κόσμου. Εάν γνωρίζουν για την ύπαρξη του Unicode, τότε το κείμενο θα γίνει αντιληπτό από αυτούς με τον ίδιο ακριβώς τρόπο όπως εσείς και εγώ. Δεν θα έχουν την παραμικρή αμφιβολία ότι ο προτελευταίος χαρακτήρας είναι το κυριλλικό πεζό μι(U+0435), και να μην πω λατινικά small μι(U+0065). Παρατηρήστε ότι δεν έχουμε πει λέξη για την αναπαράσταση byte.

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

Παραδείγματα διάφορων χαρακτήρων Unicode

Υπάρχουν αμιγώς τεχνικοί χαρακτήρες Unicode, για παράδειγμα:

  • U+0000: μηδενικός χαρακτήρας.
  • U+D800–U+DFFF: δευτερεύοντα και μεγάλα υποκατάστατα για την τεχνική αναπαράσταση σημείων κώδικα στην περιοχή από 10000 έως 10FFFF (διαβάστε: εκτός του BML/BMP) στην οικογένεια κωδικοποίησης UTF-16.
  • και τα λοιπά.
Υπάρχουν δείκτες στίξης, για παράδειγμα U+200F: ένας δείκτης για την αλλαγή της κατεύθυνσης γραφής από τα δεξιά προς τα αριστερά.

Υπάρχει μια ολόκληρη ομάδα χώρων διαφόρων πλάτους και σκοπών (δείτε εξαιρετικό άρθρο habra:):

  • U+0020 (διάστημα);
  • U+00A0 ( μη σπάζοντας χώρο, σε HTML);
  • U+2002 (ημικυκλική ενσωμάτωση ή En Space).
  • U+2003 (ενσωμάτωση ή Em Space);
  • και τα λοιπά.
Υπάρχουν συνδυαστικά διακριτικά σημάδια - κάθε είδους πινελιές, κουκκίδες, tildes κ.λπ., που αλλάζουν/ διευκρινίζουν το νόημα του προηγούμενου σημείου και το στυλ του. Για παράδειγμα:
  • U+0300 και U+0301: σημεία πρωτογενούς (οξείας) και δευτερογενούς (ασθενούς) στρες.
  • U+0306: σύντομη (επικεφαλής), όπως στο th;
  • U+0303: υπερκείμενο tilde;
  • και τα λοιπά.
Υπάρχει ακόμη και κάτι εξωτικό όπως οι ετικέτες γλώσσας (U+E0001, U+E0020–U+E007E και U+E007F), οι οποίες επί του παρόντος βρίσκονται σε κενό. Είχαν σκοπό να επισημάνουν ορισμένα τμήματα του κειμένου ότι ανήκουν σε μια συγκεκριμένη παραλλαγή γλώσσας (για παράδειγμα, αμερικανικά και βρετανικά αγγλικά), η οποία θα μπορούσε να επηρεάσει τις λεπτομέρειες του τρόπου εμφάνισης του κειμένου.

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

Χώρος κωδικού Unicode

Ο χώρος κωδικών Unicode αποτελείται από 1.114.112 θέσεις κωδικών που κυμαίνονται από 0 έως 10FFFF. Από αυτά, μόνο σε 128.237 έχουν εκχωρηθεί τιμές για την ένατη έκδοση του προτύπου.

Για λόγους ευκολίας, ολόκληρος ο χώρος χωρίζεται σε 17 επίπεδα (τα έξι από αυτά χρησιμοποιούνται αυτήν τη στιγμή). Μέχρι πρόσφατα, λεγόταν συνήθως ότι πιθανότατα θα συναντούσατε μόνο το Basic Multilingual Plane (BMP), το οποίο περιλαμβάνει χαρακτήρες Unicode από U+0000 έως U+FFFF. (Κοιτάμε λίγο μπροστά: οι χαρακτήρες από το BMP αντιπροσωπεύονται στο UTF-16 με δύο byte, όχι με τέσσερα). Το 2016, αυτή η διατριβή είναι ήδη υπό αμφισβήτηση. Για παράδειγμα, δημοφιλείς χαρακτήρες Emoji μπορεί κάλλιστα να εμφανίζονται σε ένα μήνυμα χρήστη και πρέπει να μπορείτε να τους επεξεργαστείτε σωστά.

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

Αν θέλουμε να στείλουμε κείμενο μέσω του Διαδικτύου, θα χρειαστεί να κωδικοποιήσουμε μια ακολουθία χαρακτήρων Unicode ως ακολουθία byte.

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

Επίσης, κανείς δεν έχει ακυρώσει κωδικοποιήσεις ενός byte, αλλά σας επιτρέπουν να κωδικοποιήσετε το δικό σας μεμονωμένο και πολύ στενό κομμάτι του φάσματος Unicode - 256 ή λιγότερες θέσεις κώδικα. Για τέτοιες κωδικοποιήσεις, υπάρχουν πίνακες και είναι διαθέσιμοι σε όλους, όπου κάθε τιμή ενός byte συσχετίζεται με έναν χαρακτήρα Unicode (δείτε, για παράδειγμα, CP1251.TXT). Παρά τους περιορισμούς, οι κωδικοποιήσεις ενός byte αποδεικνύονται πολύ πρακτικές όταν πρόκειται για εργασία με μια μεγάλη σειρά μονόγλωσσων πληροφορίες κειμένου.

Από τις κωδικοποιήσεις Unicode, η πιο κοινή στο Διαδίκτυο είναι η UTF-8 (κέρδισε την παλάμη το 2008), κυρίως λόγω της αποτελεσματικότητάς της και της διαφανούς συμβατότητάς της με επτά bit ASCII. Λατινικοί χαρακτήρες και χαρακτήρες υπηρεσίας, βασικά σημεία στίξης και αριθμοί - π.χ. Όλοι οι χαρακτήρες ASCII επτά bit κωδικοποιούνται στο UTF-8 ως ένα byte, όπως και στο ASCII. Οι χαρακτήρες πολλών μεγάλων σεναρίων, χωρίς να υπολογίζουμε κάποιους πιο σπάνιους ιερογλυφικούς χαρακτήρες, αντιπροσωπεύονται σε αυτό με δύο ή τρία byte. Η μεγαλύτερη θέση κώδικα που ορίζεται από το πρότυπο, 10FFFF, κωδικοποιείται σε τέσσερα byte.

Λάβετε υπόψη ότι το UTF-8 είναι μια κωδικοποίηση με μεταβλητό μήκοςκώδικας. Κάθε χαρακτήρας Unicode σε αυτό αντιπροσωπεύεται από μια ακολουθία κβάντα κώδικα με ελάχιστο μήκοςσε ένα κβαντικό. Ο αριθμός 8 σημαίνει το μήκος bit της μονάδας κώδικα (μονάδα κώδικα) - 8 bit. Για την οικογένεια κωδικοποίησης UTF-16, το μέγεθος του κβαντικού κώδικα είναι, αντίστοιχα, 16 bit. Για UTF-32 - 32 bit.

Εάν στέλνετε μια σελίδα HTML με κυριλλικό κείμενο μέσω του δικτύου, τότε το UTF-8 μπορεί να προσφέρει ένα πολύ σημαντικό όφελος, επειδή όλα τα σημάδια, καθώς και τα μπλοκ JavaScript και CSS, θα κωδικοποιηθούν αποτελεσματικά σε ένα byte. Για παράδειγμα αρχική σελίδαΤο Habra στο UTF-8 παίρνει 139Kb και στο UTF-16 είναι ήδη 256Kb. Για σύγκριση, εάν χρησιμοποιήσετε το win-1251 με την απώλεια της δυνατότητας αποθήκευσης ορισμένων χαρακτήρων, τότε το μέγεθος, σε σύγκριση με το UTF-8, θα μειωθεί μόνο κατά 11Kb σε 128Kb.

Για την αποθήκευση πληροφοριών συμβολοσειρών σε εφαρμογές, χρησιμοποιούνται συχνά κωδικοποιήσεις Unicode 16 bit λόγω της απλότητάς τους, καθώς και του γεγονότος ότι οι χαρακτήρες των σημαντικότερων συστημάτων γραφής στον κόσμο κωδικοποιούνται σε ένα κβαντικό δεκαέξι bit. Για παράδειγμα, η Java χρησιμοποιεί με επιτυχία το UTF-16 για εσωτερική αναπαράσταση συμβολοσειρών. λειτουργικό σύστημαΤα Windows χρησιμοποιούν επίσης εσωτερικά το UTF-16.

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

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

Κατώτατη γραμμή

Υπάρχουν πολλές πληροφορίες και είναι λογικό να κάνουμε μια σύντομη περίληψη όλων όσων γράφτηκαν παραπάνω:
  • Το Unicode υποστηρίζει μια σαφή διάκριση μεταξύ των χαρακτήρων, της αναπαράστασής τους σε έναν υπολογιστή και της εμφάνισής τους σε μια συσκευή εξόδου.
  • Οι χαρακτήρες Unicode δεν αντιστοιχούν πάντα σε έναν χαρακτήρα με την παραδοσιακή - αφελή έννοια, όπως ένα γράμμα, ένας αριθμός, ένα σημείο στίξης ή ένα ιερογλυφικό.
  • Ο χώρος κωδικών Unicode αποτελείται από 1.114.112 θέσεις κωδικών που κυμαίνονται από 0 έως 10FFFF.
  • Το βασικό πολύγλωσσο επίπεδο περιλαμβάνει χαρακτήρες Unicode U+0000 έως U+FFFF, οι οποίοι κωδικοποιούνται σε UTF-16 ως δύο byte.
  • Οποιαδήποτε κωδικοποίηση Unicode σάς επιτρέπει να κωδικοποιήσετε ολόκληρο τον χώρο των θέσεων κώδικα Unicode και η μετατροπή μεταξύ διαφορετικών τέτοιων κωδικοποιήσεων πραγματοποιείται χωρίς απώλεια πληροφοριών.
  • Οι κωδικοποιήσεις ενός byte σάς επιτρέπουν να κωδικοποιήσετε μόνο ένα μικρό μέρος του φάσματος Unicode, αλλά μπορεί να είναι χρήσιμες όταν εργάζεστε με μεγάλο όγκομονόγλωσσες πληροφορίες.
  • Οι κωδικοποιήσεις UTF-8 και UTF-16 έχουν μεταβλητά μήκη κώδικα. Στο UTF-8, κάθε χαρακτήρας Unicode μπορεί να κωδικοποιηθεί σε ένα, δύο, τρία ή τέσσερα byte. Σε UTF-16 - δύο ή τέσσερα byte.
  • Η εσωτερική μορφή για την αποθήκευση πληροφοριών κειμένου σε μια ξεχωριστή εφαρμογή μπορεί να είναι αυθαίρετη σωστή λειτουργίαμε ολόκληρο τον χώρο θέσης κωδικού Unicode και χωρίς απώλεια κατά τη διασυνοριακή μεταφορά δεδομένων.

Μια γρήγορη σημείωση για την κωδικοποίηση

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

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

Τα λέμε όλα αυτά για το γεγονός ότι είναι λογικό να δίνουμε προσοχή στο πλαίσιο και να διακρίνουμε καταστάσεις όταν μιλάμε για τη θέση κώδικα ενός αφηρημένου χαρακτήρα Unicode και όταν μιλάμε για την αναπαράστασή του byte.

Εν κατακλείδι

Υπάρχουν τόσες πολλές διαφορετικές πτυχές του Unicode που είναι αδύνατο να καλυφθούν τα πάντα σε ένα άρθρο. Και είναι περιττό. Οι παραπάνω πληροφορίες είναι αρκετές για να αποφευχθεί η σύγχυση στις βασικές αρχές και η εργασία με κείμενο στις περισσότερες καθημερινές εργασίες (διαβάστε: χωρίς να υπερβείτε το BMP). Στα επόμενα άρθρα θα μιλήσουμε για κανονικοποίηση και θα δώσουμε μια πιο ολοκληρωμένη ιστορική επισκόπησηανάπτυξη κωδικοποιήσεων, θα μιλήσουμε για τα προβλήματα της ρωσικής ορολογίας Unicode και θα δημιουργήσουμε επίσης υλικό για πρακτικές πτυχέςχρησιμοποιώντας UTF-8 και UTF-16.

Κάθε χρήστης του Διαδικτύου, ενώ προσπαθούσε να διαμορφώσει τη μία ή την άλλη από τις λειτουργίες του, είδε τουλάχιστον μία φορά τη λέξη "Unicode" γραμμένη στην οθόνη. Θα μάθετε τι είναι διαβάζοντας αυτό το άρθρο.

Ορισμός

Το Unicode είναι ένα πρότυπο κωδικοποίησης χαρακτήρων. Προτάθηκε από τον μη κερδοσκοπικό οργανισμό Unicode Inc. το 1991. Το πρότυπο έχει σχεδιαστεί για να ενοποιεί όσο το δυνατόν περισσότερο περισσότεροδιαφορετικούς τύπους χαρακτήρων σε ένα έγγραφο. Η σελίδα που δημιουργείται βάσει αυτής μπορεί να περιέχει γράμματα και ιερογλυφικά από διαφορετικές γλώσσες(από τα ρωσικά στα κορεάτικα) και μαθηματικά σημάδια. Σε αυτήν την περίπτωση, όλοι οι χαρακτήρες σε αυτήν την κωδικοποίηση εμφανίζονται χωρίς προβλήματα.

Λόγοι δημιουργίας

Μια φορά κι έναν καιρό, πολύ πριν την εμφάνιση ενιαίο σύστημα"Unicode", η κωδικοποίηση επιλέχθηκε με βάση τις προτιμήσεις του συντάκτη του εγγράφου. Για το λόγο αυτό, ήταν συχνά απαραίτητο να χρησιμοποιηθούν διαφορετικοί πίνακες για την ανάγνωση ενός εγγράφου. Μερικές φορές αυτό έπρεπε να γίνει πολλές φορές, γεγονός που έκανε τη ζωή πολύ πιο δύσκολη στον μέσο χρήστη. Όπως ήδη αναφέρθηκε, μια λύση σε αυτό το πρόβλημα προτάθηκε το 1991 από τον μη κερδοσκοπικό οργανισμό Unicode Inc., ο οποίος πρότεινε νέου τύπουκωδικοποίηση χαρακτήρων. Είχε σκοπό να ενώσει παρωχημένα και διαφορετικά πρότυπα. Το "Unicode" είναι μια κωδικοποίηση που κατέστησε δυνατή την επίτευξη του αδιανόητου εκείνη την εποχή: τη δημιουργία ενός εργαλείου που υποστηρίζει έναν τεράστιο αριθμό χαρακτήρων. Το αποτέλεσμα ξεπέρασε πολλές προσδοκίες - εμφανίστηκαν έγγραφα που περιείχαν ταυτόχρονα αγγλικό και ρωσικό κείμενο, λατινικές και μαθηματικές εκφράσεις.

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

  • ξωτικά γραπτά, ή "krakozyabry"?
  • περιορισμένο σύνολο χαρακτήρων.
  • Πρόβλημα μετατροπής κωδικοποίησης.
  • αντιγραφή γραμματοσειρών.

Μια σύντομη ιστορική εκδρομή

Φανταστείτε ότι είναι η δεκαετία του '80. Τεχνολογία υπολογιστώνδεν είναι ακόμα τόσο διαδεδομένο και έχει διαφορετική εμφάνιση από σήμερα. Εκείνη την εποχή, κάθε λειτουργικό σύστημα ήταν μοναδικό με τον δικό του τρόπο και τροποποιήθηκε από κάθε ενθουσιώδη για συγκεκριμένες ανάγκες. Η ανάγκη ανταλλαγής πληροφοριών μετατρέπεται σε πρόσθετη τελειοποίηση των πάντων. Μια προσπάθεια ανάγνωσης ενός εγγράφου που δημιουργήθηκε σε άλλο λειτουργικό σύστημα εμφανίζει συχνά ένα ακατανόητο σύνολο χαρακτήρων στην οθόνη και ξεκινούν τα παιχνίδια με την κωδικοποίηση. Δεν είναι πάντα δυνατό να γίνει αυτό γρήγορα, και μερικές φορές απαιτούμενο έγγραφοκαταφέρνει να ανοίξει σε έξι μήνες, ή και αργότερα. Τα άτομα που ανταλλάσσουν πληροφορίες συχνά δημιουργούν πίνακες μετατροπών για τον εαυτό τους. Και η επεξεργασία τους αποκαλύπτει μια ενδιαφέρουσα λεπτομέρεια: πρέπει να δημιουργηθούν προς δύο κατευθύνσεις: «από το δικό μου στο δικό σου» και πίσω. Το μηχάνημα δεν μπορεί να κάνει μια απλή αντιστροφή υπολογισμών για αυτό, η πηγή βρίσκεται στη δεξιά στήλη και το αποτέλεσμα βρίσκεται στην αριστερή, αλλά όχι το αντίστροφο. Εάν υπάρχει ανάγκη να χρησιμοποιήσετε οποιοδήποτε ειδικούς χαρακτήρεςστο έγγραφο, έπρεπε πρώτα να προστεθούν και στη συνέχεια να εξηγηθεί στον συνεργάτη τι έπρεπε να κάνει ώστε αυτά τα σύμβολα να μην μετατραπούν σε "τρελά πράγματα". Και ας μην ξεχνάμε ότι για κάθε κωδικοποίηση έπρεπε να αναπτύξουμε ή να εφαρμόσουμε προσαρμοσμένες γραμματοσειρές, που οδήγησε στη δημιουργία τεράστιο ποσόδιπλότυπα στο λειτουργικό σύστημα.

Φανταστείτε ότι στη σελίδα γραμματοσειράς θα δείτε 10 όμοια κομμάτια Times New Roman με μικρές σημειώσεις: για UTF-8, UTF-16, ANSI, UCS-2. Τώρα καταλαβαίνετε αυτή την εξέλιξη καθολικό πρότυποήταν επείγουσα ανάγκη;

«Δημιουργοί Πατέρες»

Η προέλευση του Unicode μπορεί να εντοπιστεί πίσω στο 1987, όταν ο Joe Becker της Xerox, μαζί με τους Lee Collins και Mark Davis του Μήλοξεκίνησε έρευνα στο πεδίο πρακτική δημιουργίακαθολικό σύνολο χαρακτήρων. Τον Αύγουστο του 1988, ο Joe Becker δημοσίευσε ένα προσχέδιο πρότασης για ένα διεθνές πολύγλωσσο σύστημα κωδικοποίησης 16 bit.

Σε λίγους μήνες ομάδα εργασίαςΤο Unicode επεκτάθηκε για να συμπεριλάβει τους Ken Whistler και Mike Kerneghan της RLG, τον Glenn Wright της Sun Microsystems και αρκετούς άλλους, ολοκληρώνοντας την προκαταρκτική εργασία σε ένα ενιαίο πρότυπο κωδικοποίησης.

Γενική περιγραφή

Το Unicode βασίζεται στην έννοια του χαρακτήρα. Αυτός ο ορισμός αναφέρεται σε ένα αφηρημένο φαινόμενο που υπάρχει σε ένα συγκεκριμένο είδος γραφής και πραγματοποιείται μέσω γραφημάτων (τα «πορτρέτα» τους). Κάθε χαρακτήρας προσδιορίζεται στο Unicode από έναν μοναδικό κωδικό που ανήκει σε ένα συγκεκριμένο μπλοκ του προτύπου. Για παράδειγμα, το γράφημα Β είναι και στο αγγλικό και στο ρωσικό αλφάβητο, αλλά στο Unicode αντιστοιχεί σε 2 διαφορετικά σύμβολα. Εφαρμόζεται ένας μετασχηματισμός σε αυτά, δηλαδή, καθένα από αυτά περιγράφεται από ένα κλειδί βάσης δεδομένων, ένα σύνολο ιδιοτήτων και ένα πλήρες όνομα.

Πλεονεκτήματα του Unicode

Η κωδικοποίηση Unicode διέφερε από άλλες σύγχρονες στην τεράστια προσφορά χαρακτήρων για την «κρυπτογράφηση» χαρακτήρων. Το γεγονός είναι ότι οι προκάτοχοί του είχαν 8 bit, δηλαδή υποστήριζαν 28 χαρακτήρες, αλλά νέα ανάπτυξηείχε ήδη 216 χαρακτήρες, κάτι που ήταν ένα τεράστιο βήμα προς τα εμπρός. Αυτό κατέστησε δυνατή την κωδικοποίηση σχεδόν όλων των υπαρχόντων και ευρέως διαδεδομένων αλφαβήτων.

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

Ανάπτυξη Unicode

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

Ωστόσο, δεν πρέπει να υποθέσουμε ότι η ίδια κωδικοποίηση Unicode είναι διαθέσιμη σε εμάς σήμερα όπως ήταν πριν από ένα τέταρτο του αιώνα. Επί αυτή τη στιγμήΗ έκδοσή του άλλαξε σε 5.x.x και ο αριθμός των κωδικοποιημένων χαρακτήρων αυξήθηκε σε 231. Η δυνατότητα χρήσης μεγαλύτερης προσφοράς χαρακτήρων εγκαταλείφθηκε προκειμένου να διατηρηθεί η υποστήριξη για το Unicode-16 (κωδικοποιήσεις όπου ο μέγιστος αριθμός περιοριζόταν στους 216) . Από την έναρξή του μέχρι την έκδοση 2.0.0, το "Unicode Standard" αύξησε τον αριθμό των χαρακτήρων που περιλάμβανε σχεδόν 2 φορές. Η αύξηση των ευκαιριών συνεχίστηκε τα επόμενα χρόνια. Από την έκδοση 4.0.0 υπήρχε ήδη ανάγκη να αυξηθεί το ίδιο το πρότυπο, κάτι που έγινε. Ως αποτέλεσμα, το Unicode απέκτησε τη μορφή με την οποία το γνωρίζουμε σήμερα.

Τι άλλο υπάρχει στο Unicode;

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

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

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

Διάδοση του προτύπου

Στα 25 χρόνια της ιστορίας της, η κωδικοποίηση Unicode έχει γίνει ίσως η πιο διαδεδομένη στον κόσμο. Τα προγράμματα και οι ιστοσελίδες προσαρμόζονται επίσης σε αυτό το πρότυπο. Το εύρος της εφαρμογής μπορεί να αποδειχθεί από το γεγονός ότι το Unicode χρησιμοποιείται σήμερα από περισσότερο από το 60% των πόρων του Διαδικτύου.

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



Συνιστούμε να διαβάσετε

Κορυφή