Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά...

21
Elinikos - Ελληνικά Unicode και utf8 Δομημένος Προγραμματισμός Τσαγκατάκης Ιωάννης

Transcript of Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά...

Page 1: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

Elinikos - ΕλληνικάUnicode και utf8

Δομημένος ΠρογραμματισμόςΤσαγκατάκης Ιωάννης

Page 2: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

2

Ορισμοί: Χαρακτήρας● Ένας χαρακτήρας είναι η μικρότερη μονάδα του γραπτού λόγου.

● Γράμματα (Α, b, a, α)● Ψηφία (1,2,3)● Τυπογραφικά σύμβολα

● Διακριτικά (τόνοι)● Άλλα σύμβολα● Μαθηματικά σύμβολα● Χαρακτήρες ελέγχου (\n, \t)n, \n, \t)t)

● Ένας Γλύφος (Glyph)Glyph)) είναι η μικρότερη μονάδα απεικόνισης του γραπτού λόγου που έχει νόημα

● Ένα graph)eme είναι η μικρότερη μονάδα σχεδίασης (πινελιά)

προέρχεται από την ελληνική λέξη γλυφή (σκάλισμα, χάραγμα)

Page 3: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

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 );

Page 4: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

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)● ....● ...

Page 5: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

5

Αχ αυτοί οι πολιτισμοί● Στα αραβικά το ίδιο γράμμα μπορεί να έχει μέχρι 4

διαφορετικές μορφές– Ανάλογα με την θέση του μέσα στην λέξη

● Συλαβάρια, γράμματα, ιερογλυφικά, ...● Αριστερά-δεξιά, δεξιά-αριστερά, εναλλάξ, βουστροφηδόν,

πάνω/κάτω/αριστερα/δεξιά, ....● Λιγκλατούρες και καλλιγραφία

Page 6: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

6

Ορισμοί : Κωδικοποίηση● Έχουμε ένα το σύνολο όλων των πιθανών χαρακτήρων ● Κάθε χαρακτήρας έχει ένα αναγνωριστικό όνομα (name)● Κάθε χαρακτήρας έχει μια θέση (code point)● Η μέθοδος αναπαράστασης ενός code point σε ψηφιακή

μορφή καλείτε κωδικοποίηση χαρακτήρα (ch)aracter encoding)

Page 7: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

7

Παράδειγμα● Στο ASCII ο χαρακτήρα (αγγλικό) A έχει

– Όνομα ‘Capital A’Capital A’– Αριθμό (Code point) 65 – Εύρος αριθμών 27 = 128 ή 28=256

– Κωδικοποίηση σε 7 ή σε 8 bit

0100 0001 (Ox41)

Δεκαεξαδική μορφή

Page 8: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

8

Unicode● Πολλά στάνταρντ να διαλέξει κανείς

– Για πολλά scripts (αλφάβητα, συλαβάρια, ...) και languages (γλώσσες) ● Κείμενο σε λίγες γλώσσες ταυτόχρονα

– Shift Encodings ● Λύση

Αν αυξήσουμε την κωδικοποίηση στα 16 bits ;– Unicode– Κάθε κείμενο σε κάθε γλώσσα που έχει υπάρξει ποτέ– Τα 16 bits δεν φτάνουν για emoji (και κινέζικα)

● Στα 32 bits (Θέλει λοιπόν 4 φορές περισσότερο χώρο στην μνήμη;)1

Page 9: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

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

Page 10: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

10

Η κωδικοποίηση UTF8● Μεταβλητού μήκους

– 1 byte ● κώδικες προγραμμάτων, αριθμοί, αγγλικά● Ακριβώς ίδιο με το ASCII (7bit)● Ίδιες απαιτήσεις σε χώρο / bandwith

– Σε ευρωπαϊκές γλώσσες 2 bytes ανά code point● ~ 50% επιπλέον στα Κυριλλικά● ~ 100% στα ελληνικά

– Απο 3 έως 6 byte● CJK (Κινέζικά κορεάτικα γιαπωνέζικα)● Αν και προτιμούν shift encodings

– Για πρακτικούς λόγους (μεγάλο μήκος αναπαράστασης)– Για πολιτικούς Han unification

Page 11: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

11

Παράδειγμα

Page 12: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

12

Πρόσθετα στοιχεία● Επιπλέον πληροφορίες για

– Όνομα του χαρακτήρα– Το script που ανήκει– Είδος του χαρακτήρα– Κανονικές μορφές– Αριθμητική τιμή– ...

– Μετατροπή σε άλλη μορφή (πχ κεφαλαία)

● Εξαρτούμενο απο την γλώσσα

– Σπάσιμο σε γραμμές– Κατεύθυνση κειμένου– Ταξινόμηση

● Εξαρτούμενο απο την γλώσσα

Page 13: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

13

Παράδειγμα

'GREEK CAPITAL LETTER ALPHA WITH TONOS' (U+0386)

Page 14: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

14

Σύνθετοι χαρακτήρες● LATIN CAPITAL LETTER Z WITH

STROKE U+01B5● COMBINING CEDILLA U+0327● COMBINING DIAERESIS U+0308

Z, with stroke, cedilla and umlaut ?

Page 15: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

15

Κανονικοποιημένες μορφές● Διάφορα επίπεδα κανονικοποίησης

Στα ελληνικά ένα μόνο

'GREEK CAPITAL LETTER IOTA WITH TONOS' (Glyph)U+038A)

'GREEK CAPITAL LETTER IOTA' (Glyph)U+0399) 'COMBINING ACUTE ACCENT' (Glyph)U+0301)

Ο έλεγχος ισότητας θα πρέπει να γίνει με χρήση βιβλιοθήκης και μετατροπή στην ίδια κανονικοποιημένη μορφή

Page 16: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

16

Από που σπάμε το αυγό;● Τα ταξίδια του Γκιουλιβερ● Byte Order Mark (BOM)

Ειδικός χαρακτήρας● Δεν απαιτείτε στο UTF-8

Page 17: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

17

UTF-8 και C● Η αναπαράσταση δεν περιέχει εσωτερικά NULL

– Τα υπάρχοντα προγράμματα δεν θέλουν καμία αλλαγή– Αλλά η συνάρτηση strlen θα δώσει “λάθος” αποτέλεσμα– Το πλήθος των χαρακτήρων μικρή σημασία έχει

● Έχει νόημα σε δυτικές γλώσσες. Τι είναι ένας αραβικός χαρακτήρας;● Στους υπολογιστές σε ενδιαφέρει ο χώρος αποθήκευσης.

● Οι συναρτήσεις ταξινόμησης χαρακτήρων δεν λειτουργούν● Θα πρέπει να χρησιμοποιήσουμε ειδικές βιβλιοθήκες

● Άλλα πλεονεκτήματα– Ξέρουμε αν ένα byte ξεκινά ή είναι μέρος ενός χαρακτήρα

Page 18: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

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

● Μαθηματικά ελληνικά σύμβολα

Page 19: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

19

Πράγματα να θυμόμαστε● Οι ανθρώπινες κουλτούρες είναι πολύπλοκες● Προτιμάμε την χρήση του UTF-8 και θεωρούμε πως είναι σχεδόν ASCII● Αποφεύγουμε την χρήση wide chars και UTF-16● Ένας χαρακτήρας δεν είναι ένα byte/char

– H strlen θα δώσει λάθος αποτέλεσμα● Γνωρίζουμε ότι υπάρχουν οι κανονικές μορφές● Αν θέλουμε να δουλέψουμε σε επίπεδο χαρακτήρα

– Ειδικές εξωτερικές βιβλιοθήκες– International components for unicode (ICU)

Page 20: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

20

Διεθνοποίηση και Τοπικοποίηση● Διεθνοποίηση, Internationalization, i18n

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

● Τοπικοποίηση, Localization, i10n– Μετάφραση του λογισμικού σε άλλη γλώσσα– Ομάδα μετάφρασης

Page 21: Elinikos - Ελληνικά Unicode και utf8 · 2019. 11. 21. · Elinikos - Ελληνικά Unicode και utf8 ... Ένας χαρακτήρας είναι η μικρότερη

21

Ερωτήσεις;

Μὴν καταργεῖτε τὴν ὑπογεγραμμένη, ἰδίως κάτω ἀπὸ τὸ ὠμέγαΝτίνος Χριστιανόπουλος