Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά...
Transcript of Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά...
Elinikos - ΕλληνικάUnicode και utf8
Δομημένος ΠρογραμματισμόςΤσαγκατάκης Ιωάννης
2
Ορισμοί: Χαρακτήρας● Ένας χαρακτήρας είναι η μικρότερη μονάδα του γραπτού λόγου.
● Γράμματα (Α, b, a, α)● Ψηφία (1,2,3)● Τυπογραφικά σύμβολα
● Διακριτικά (τόνοι)● Άλλα σύμβολα● Μαθηματικά σύμβολα● Χαρακτήρες ελέγχου (\n, \t)n, \n, \t)t)
● Ένας Γλύφος (Glyph)Glyph)) είναι η μικρότερη μονάδα απεικόνισης του γραπτού λόγου που έχει νόημα
● Ένα graph)eme είναι η μικρότερη μονάδα σχεδίασης (πινελιά)
προέρχεται από την ελληνική λέξη γλυφή (σκάλισμα, χάραγμα)
3
Ο κώδικας ANSI (4 στήλες)#include <ctype.h>
int isalpha( int ch );int isalnum( int ch );int islower( int ch );int isupper( int ch );int isdigit( int ch );int isxdigit( int ch );int iscntrl( int ch );int isgraph( int ch );int isspace( int ch );int isblank( int ch ); (C99)int isprint( int ch );int ispunct( int ch )
int tolower( int ch );int toupper( int ch );
4
Επεκτάσεις στα 8 bit● ISO 8859-1 (Western)● ISO 8859-5 (Cyrillic)● ISO 8859-7 (Greek)● ISO 8859-8 (Hebrew)
● Code page 437 (DOS)● Code page 1252 (Windows)● Apple II, Amiga, ...● Macintosh (many)● ....● ...
5
Αχ αυτοί οι πολιτισμοί● Στα αραβικά το ίδιο γράμμα μπορεί να έχει μέχρι 4
διαφορετικές μορφές– Ανάλογα με την θέση του μέσα στην λέξη
● Συλαβάρια, γράμματα, ιερογλυφικά, ...● Αριστερά-δεξιά, δεξιά-αριστερά, εναλλάξ, βουστροφηδόν,
πάνω/κάτω/αριστερα/δεξιά, ....● Λιγκλατούρες και καλλιγραφία
6
Ορισμοί : Κωδικοποίηση● Έχουμε ένα το σύνολο όλων των πιθανών χαρακτήρων ● Κάθε χαρακτήρας έχει ένα αναγνωριστικό όνομα (name)● Κάθε χαρακτήρας έχει μια θέση (code point)● Η μέθοδος αναπαράστασης ενός code point σε ψηφιακή
μορφή καλείτε κωδικοποίηση χαρακτήρα (ch)aracter encoding)
7
Παράδειγμα● Στο ASCII ο χαρακτήρα (αγγλικό) A έχει
– Όνομα ‘Capital A’Capital A’– Αριθμό (Code point) 65 – Εύρος αριθμών 27 = 128 ή 28=256
– Κωδικοποίηση σε 7 ή σε 8 bit
0100 0001 (Ox41)
Δεκαεξαδική μορφή
8
Unicode● Πολλά στάνταρντ να διαλέξει κανείς
– Για πολλά scripts (αλφάβητα, συλαβάρια, ...) και languages (γλώσσες) ● Κείμενο σε λίγες γλώσσες ταυτόχρονα
– Shift Encodings ● Λύση
Αν αυξήσουμε την κωδικοποίηση στα 16 bits ;– Unicode– Κάθε κείμενο σε κάθε γλώσσα που έχει υπάρξει ποτέ– Τα 16 bits δεν φτάνουν για emoji (και κινέζικα)
● Στα 32 bits (Θέλει λοιπόν 4 φορές περισσότερο χώρο στην μνήμη;)1
9
Οι κωδικοποιήσεις του Unicode ● UTF-32 / UCS-4
– 32bits (4 bytes ανά χαρακτήρα) Άουτς● UTF-16 / UCS-2
– 16bits ανά χαρακτήρα, ανεκτό– Ασυμβατότητα με προγράμματα βασισμένα σε ASCII– Νέος τύπος χαρακτήρα και νέες συναρτήσεις στη C/C++ (wchar_t)– Κάποια χρήση σε Windows API, Java, Javascript– Δεν απεικονίζει όλο το unicode, επεκτάσιμο σε 4 bytes με κόλπο – Σήμερα αποφεύγουμε την χρήση του, υπέρ του UTF-8
● UTF-7, UTF-EBCDIC
10
Η κωδικοποίηση UTF8● Μεταβλητού μήκους
– 1 byte ● κώδικες προγραμμάτων, αριθμοί, αγγλικά● Ακριβώς ίδιο με το ASCII (7bit)● Ίδιες απαιτήσεις σε χώρο / bandwith
– Σε ευρωπαϊκές γλώσσες 2 bytes ανά code point● ~ 50% επιπλέον στα Κυριλλικά● ~ 100% στα ελληνικά
– Απο 3 έως 6 byte● CJK (Κινέζικά κορεάτικα γιαπωνέζικα)● Αν και προτιμούν shift encodings
– Για πρακτικούς λόγους (μεγάλο μήκος αναπαράστασης)– Για πολιτικούς Han unification
11
Παράδειγμα
12
Πρόσθετα στοιχεία● Επιπλέον πληροφορίες για
– Όνομα του χαρακτήρα– Το script που ανήκει– Είδος του χαρακτήρα– Κανονικές μορφές– Αριθμητική τιμή– ...
– Μετατροπή σε άλλη μορφή (πχ κεφαλαία)
● Εξαρτούμενο απο την γλώσσα
– Σπάσιμο σε γραμμές– Κατεύθυνση κειμένου– Ταξινόμηση
● Εξαρτούμενο απο την γλώσσα
13
Παράδειγμα
'GREEK CAPITAL LETTER ALPHA WITH TONOS' (U+0386)
14
Σύνθετοι χαρακτήρες● LATIN CAPITAL LETTER Z WITH
STROKE U+01B5● COMBINING CEDILLA U+0327● COMBINING DIAERESIS U+0308
Z, with stroke, cedilla and umlaut ?
15
Κανονικοποιημένες μορφές● Διάφορα επίπεδα κανονικοποίησης
Στα ελληνικά ένα μόνο
'GREEK CAPITAL LETTER IOTA WITH TONOS' (Glyph)U+038A)
'GREEK CAPITAL LETTER IOTA' (Glyph)U+0399) 'COMBINING ACUTE ACCENT' (Glyph)U+0301)
Ο έλεγχος ισότητας θα πρέπει να γίνει με χρήση βιβλιοθήκης και μετατροπή στην ίδια κανονικοποιημένη μορφή
16
Από που σπάμε το αυγό;● Τα ταξίδια του Γκιουλιβερ● Byte Order Mark (BOM)
Ειδικός χαρακτήρας● Δεν απαιτείτε στο UTF-8
17
UTF-8 και C● Η αναπαράσταση δεν περιέχει εσωτερικά NULL
– Τα υπάρχοντα προγράμματα δεν θέλουν καμία αλλαγή– Αλλά η συνάρτηση strlen θα δώσει “λάθος” αποτέλεσμα– Το πλήθος των χαρακτήρων μικρή σημασία έχει
● Έχει νόημα σε δυτικές γλώσσες. Τι είναι ένας αραβικός χαρακτήρας;● Στους υπολογιστές σε ενδιαφέρει ο χώρος αποθήκευσης.
● Οι συναρτήσεις ταξινόμησης χαρακτήρων δεν λειτουργούν● Θα πρέπει να χρησιμοποιήσουμε ειδικές βιβλιοθήκες
● Άλλα πλεονεκτήματα– Ξέρουμε αν ένα byte ξεκινά ή είναι μέρος ενός χαρακτήρα
18
Greek Unicode Tables
● Greek and Coptichttps://unicode.org/charts/PDF/U0370.pdf
● Greek extended
https://unicode.org/charts/PDF/U1F00.pdf
● Ancient Greek Musical Notation
https://unicode.org/charts/PDF/U1D200.pdf
● Byzantine Musical Symbols
https://unicode.org/charts/PDF/U1D000.pdf
● Linear Script A and B
https://unicode.org/charts/PDF/U10600.pdf
https://unicode.org/charts/PDF/U10000.pdf
https://unicode.org/charts/PDF/U10080.pdf
● Ancient Greek Numbers
https://unicode.org/charts/PDF/U10140.pdf
● Phaistos Disc
https://unicode.org/charts/PDF/U101D0.pdf
● Aegean Numbers
https://unicode.org/charts/PDF/U10100.pdf
● Μαθηματικά ελληνικά σύμβολα
19
Πράγματα να θυμόμαστε● Οι ανθρώπινες κουλτούρες είναι πολύπλοκες● Προτιμάμε την χρήση του UTF-8 και θεωρούμε πως είναι σχεδόν ASCII● Αποφεύγουμε την χρήση wide chars και UTF-16● Ένας χαρακτήρας δεν είναι ένα byte/char
– H strlen θα δώσει λάθος αποτέλεσμα● Γνωρίζουμε ότι υπάρχουν οι κανονικές μορφές● Αν θέλουμε να δουλέψουμε σε επίπεδο χαρακτήρα
– Ειδικές εξωτερικές βιβλιοθήκες– International components for unicode (ICU)
20
Διεθνοποίηση και Τοπικοποίηση● Διεθνοποίηση, Internationalization, i18n
– Προσαρμογή του λογισμικού στις τοπικές ρυθμίσεις– Μορφή ώρας, ημερομηνίας, νομισματικού ποσού, σύμβολο δεκαδικών– Ταξινόμηση – Απο την ομάδα ανάπτυξης λογισμικού
● Τοπικοποίηση, Localization, i10n– Μετάφραση του λογισμικού σε άλλη γλώσσα– Ομάδα μετάφρασης
21
Ερωτήσεις;
Μὴν καταργεῖτε τὴν ὑπογεγραμμένη, ἰδίως κάτω ἀπὸ τὸ ὠμέγαΝτίνος Χριστιανόπουλος