See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
UTF-8 - Βικιπαίδεια

UTF-8

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Το UTF-8 (8-bit Unicode Transformation Format) είναι ένα μη-απωλεστικό, σχήμα κωδικοποίησης χαρακτήρων μεταβλητού μήκους για το πρότυπο Unicode που δημιουργήθηκε από τους Ken Thompson και Rob Pike. Χρησιμοποιεί ομάδες από bytes για να αναπαραστήσει τα κωδικά σημεία του Unicode.Είναι ιδιαίτερα χρήσιμο για μετάδοση δεδομένων σε 8bit συστήματα ηλεκτρονικού ταχυδρομείου.

Συγκεκριμένα χρησιμοποιεί ένα μέχρι τέσσερα bytes ανά χαρακτήρα ανάλογα με το σύμβολο και το κωδικό του σημείο.Για παράδειγμα μόνο ένα UTF-8 byte χρειάζεται για την κωδικοποίηση των 128 ASCII χαρακτήρες στο διάστημα του Unicode U+0000 μέχρι U+007F.


Τέσσερα bytes μπορεί να φαίνονται πολλά για έναν χαρακτήρα(κωδικό σημείο),παρόλαυτά αυτό αφορά μόνο κωδικά σημεία εκτός του Βασικού πολυγλωσσικού επιπέδου,τα οποία σπάνια χρησιμοποιούνται. Επίσης το UTF-16 (το κύριο εναλλακτικό σχήμα στο UTF-8) επίσης χρειάζεται τέσσερα bytes για αυτά τα κωδικά σημεία. Το ποιό είναι ποιό αποδοτικό το UTF-8 ή το UTF-16, εξαρτάται από το εύρος των κωδικών σημείων που θα χρησιμοποιηθούν. Οι διαφορές των δυο σχημάτων μπορούν όμως να γίνουν αμελητέες με την χρήση παραδοσιακών συστημάτων συμπίεσης όπως DEFLATE. Για μικρά κομμάτια κειμένου όπου οι παραδοσιακοί αλγόριθμοι δεν αποδίδουν καλά και όπου το μέγεθος του αρχείου μετράει μπορεί να χρησιμοποιηθεί και το Πρότυπο Σχήμα Συμπίεσης για Unicode

Η IETF (Internet Engineering Task Force) απαιτεί όλα τα πρωτόκολα διαδικτύου να αναγνωρίζουν και να υποστηρίζουν τουλάχιστον σαν σχήμα κωδικοποίησης χαρακτήρων τουλάχιστον το UTF-8

Πίνακας περιεχομένων

[Επεξεργασία] Περιγραφή

Το UTF-8 έχει γίνει το πρότυπο γνωστό σαν RFC 3629 (UTF-8, ένα φορμάτ μετασχηματισμού του καθολικού συνόλου χαρακτήρων ISO 10646).

Συνοπτικά,τα bits ενός χαρακτήρα Unicode διαιρούνται σε ομάδες οι οποίες κατόπιν διαιρούνται ανάμεσα στα χαμηλότερης αξίας bits μέσα σε UTF-8 bytes.

Ένας χαρακτήρας που το κωδικό του σημείο είναι μικρότερο του U+0080 κωδικοποιείται με ένα μόνο byte που περιέχει το κωδικό σημείο: αυτό το σύνολο χαρακτήρων αντιστοιχεί στους 128 χαρακτήρες του 7-bit ASCII.

Σε άλλες περιπτώσεις απαιτούνται μέχρι και τέσσερα bytes. Το πιο σημαντικό bit αυτών των bytes είναι 1, για να αποφευχθεί η σύγχυση με τους 7-bit ASCII χαρακτήρες, και συγκεκριμένα με χαρακτήρες με κωδικά σημεία μικρότερα του U+0020, που παραδοσιακά καλούνται χαρακτήρες ελέγχου, όπως ο carriage return.

Code range
hexadecimal
UTF-16 UTF-8
binary
Notes
000000 - 00007F 00000000 0xxxxxxx 0xxxxxxx ASCII equivalence range; byte begins with zero
seven x seven x
000080 - 0007FF 00000xxx xxxxxxxx 110xxxxx 10xxxxxx first byte begins with 110 or 1110, the following byte(s) begin with 10
three x, eight x five x, six x
000800 - 00FFFF xxxxxxxx xxxxxxxx 1110xxxx 10xxxxxx 10xxxxxx
eight x, eight x four x, six x, six x
010000 - 10FFFF 110110xx xxxxxxxx 110111xx xxxxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx UTF-16 requires surrogates; an offset of 0x10000 is subtracted, so the bit pattern is not identical with UTF-8
two x, eight x, two x, eight x three x, six x, six x, six x

Για παράδειγμα ο χαρακτήρας άλεφ (א), που είναι ο χαρακτήρας Unicode με κωδικό σημείο U+05D0, μέσω του σχήματος UTF-8 κωδικοποιείται ώς εξής:

  • Βρίσκεται στο διάστημα U+0080 - U+07FF. Ο πίνακας δείχνει ότι θα κωδικοποιηθεί χρησιμοποιόντας δύο bytes 110xxxxx 10xxxxxx.
  • Ο δεκαεξαδικός 0x05D0 είναι ισοδύναμος στον δυαδικό 101-1101-0000.
  • Τα έντεκα μπιτς τοποθετούνται με την σειρά που έχουν στις θέσεις που σημειώνονται με "x" : 11010111 10010000.
  • Το τελικό αποτέλεσμα είναι δύο μπάιτς, που για οικονομία τα εκφράζουμε σαν δύο μπάιτς στο δεκαεξαδικό 0xD7 0x90. Αυτό είναι το γράμμα άλεφ στο σχήμα UTF-8.

Έτσι οι πρώτοι 128 χαρακτήρες χρειάζονται ένα μπάϊτ. Οι επόμενοι 1920 χαρακτήρες χρειάζονται δύο μπάϊτς. Αυτοί περιλαμβάνουν Latin alphabet characters with diacritics, Greek, Cyrillic, Coptic, Armenian, Hebrew, και Arabic χαρακτήρες. Οι επόμενοι από τους BMP χαρακτήρες χρησιμοποιούν τρια μπάϊτς και οι υπόλοιποι χαρακτήρες κωδικοποιούνται με τέσσερα μπάϊτς.

Συνεχίζοντας παρόμοια είναι δυνατό να χειριστούμε πολύ μεγάλους αριθμούς. Αρχικά το πρότυπο επέτρεπε ακολουθίες μέχρι έξι μπάϊτς καλύπτοντας το διάστημα U+0000 - U+7FFFFFFF (31 μπίτς). Όμως τελικά το UTF-8 περιορίστηκε από το RFC 3629 να χρησιμοποιεί μόνο το διάστημα που καλύπτει τυπικά το Unicode, από U+0000 ως U+10FFFF, το Νοέμβριο του 2003. Πριν συμβεί αυτό μόνο τα bytes 0xFE και 0xFF δεν εμφανίζονταν σε UTF-8 κωδικοποιημένο κείμενο. Μετά την εισαγωγή αυτού του ορίου ο αριθμός των αχρησιμοποιήτων μπάϊτς σε UTF-8 κείμενο αυξήθηκε σε 13 bytes: 0xC0, 0xC1, και 0xF5 μέχρι 0xFF.

[Επεξεργασία] Τροποποιημένο UTF-8

Η Γλώσσα προγραμματισμού Java, που χρησιμοποιεί UTF-16 για την εσωτερική αναπαράσταση κειμένου υποστηρίζει μια μη-τυποποιημένη τροποποίηση του UTF-8 για σειριοποίηση συμβολοσειρών. Αυτή η κωδικοποίηση λέγεται modified UTF-8.


[Επεξεργασία] Σκεπτικό πίσω από UTF-8

Σαν συνέπεια της λειτουργίας του UTF-8, ισχύουν οι ακόλουθες ιδιότητες για ακολουθίες πολλών μπάϊτς:

  • Το Πιο σημαντικό μπιτ ενός χαρακτήτα ενός μπάϊτ είναι πάντα 0.
  • Τα πιο σημαντικά μπιτς του πρώτου μπάιτ μιας ακολουθίας πολλών μπάϊτ καθορίζει το μήκος της ακολουθίας. Αυτά τα πιο σημαντικά μπιτς είναι τα 110 για ακολουθίες δύο μπάϊτ; 1110 για ακολουθίες τριών μπάϊτ κτλ.
  • Τα ακόλουθα μπάιτς μιας ακολουθίας πολλών μπάϊτ έχουν 10 σαν τα δύο ποιό σημαντικά μπιτς.

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

Επίσης λόγω του σχεδιασμού των ακολουθιών μπάϊτς, αν μια ακολουθία που υποθέτουμε ότι αναπαριστά κείμενο επαληθευτεί σαν UTF-8 τότε με μεγάλη σιγουριά μπορούμε να υποθέσουμε ότι είναι UTF-8. Η οικογένεια προτύπων ISO-8859 χρησιμοποιεί 100xxxxx για εξαιρετικά σπάνιους κωδικούς ελέγχου. Και κάποιες άλλες παραδοσιακές κωδικοποιήσεις χρησιμοποιούν μπάιτς σε αυτό το διάστημα αλλά μόνο για σπάνιους χαρακτήρες.

Μπορούν να χρησιμοποιηθούν σχήματα μπιτ προκειμένου να αναγνωρίστούν UTF-8 χαρακτήρες. Αν το πρώτο μπάιτ στο δεκαεξαδικό αρχίζει με 0-7 είναι χαρακτήρας ASCII. Αν αρχίζει με C ή D, είναι χαρακτήρας 11 μπιτ (εκφρασμένος με δυο μπάϊτ). Αν αρχίζει με E είναι 16 μπιτ (εκφρασμένος σε 3 μπάϊτς) και αν αρχίζει με F, είναι 21 μπιτς εκφρασμένος σε 4 μπάϊτς). 8 μέχρι B δεν μπορούν να είναι αρχικά ψηφία, αλλά όλα τα ακόλουθα μπάϊτς πρέπει να αρχίζουν με ψηφίο ανάμεσα στο 8 και το B. Έτσι με μια ματιά μπορείς να πεις ότι ο "0xA9" δεν είναι έγκυρος UTF-8 χαρακτήρας, αλλά ότι οι "0x54", "0xE3 0xB4 ή 0xB1" είναι έγκυροι UTF-8 χαρακτήρες.

[Επεξεργασία] Μακρείς φόρμες , μη-έγκυρη είσοδος,και θέματα ασφάλειας

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

  1. Εισαγωγή χαρακτήρα αντικατάστασης (πχ. '?', '�')
  2. Να προσπεράσει τον χαρακτήρα
  3. Να μεταφράσει τον χαρακτήρα σαν να ήταν από άλλο σύνολο χαρακτήρων (συχνά Latin-1)
  4. Να μεταφράσει όλο το κείμενο σαν να ήταν από άλλο σύνολο χαρακτήρων

(συχνά Latin-1 ή το τοπικό σύνολο χαρακτήρων), κάτι που συμβαίνει σε εφαρμογές όπως IRC όπου το UTF-8 δεν είναι καθολικά αποδεκτό και δεν υπάρχει ενσωματομένος στο πρόγραμμα τρόπος για να καθοριστεί το σύνολο χαρακτήρων.

  1. Να αδιαφορήσει και να αποκωδικοποιήσει σαν ο χαρακτήρας να ήταν κάποιος παραπλίσιος του UTF-8
  2. Να αναφέρει λάθος

[Επεξεργασία] Δες επίσης

  • ASCII
  • ISO 8859
  • GB18030
  • Universal Character Set
  • Byte Order Mark
  • Unicode and HTML
  • Character encodings in HTML
  • Unicode and e-mail
  • Complex script

[Επεξεργασία] Εξωτερικοί σύνδεσμοι


Το περιεχόμενο του άρθρου βασίζεται στο αντίστοιχο άρθρο της Αγγλόγλωσσης Βικιπαίδειας, η οποία διανέμεται υπό την GNU FDL. (ιστορικό/συντάκτες).


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -