|
Εργαλειοθήκη |
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.
Η 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.
Για παράδειγμα ο χαρακτήρας άλεφ (א), που είναι ο χαρακτήρας Unicode με κωδικό σημείο U+05D0, μέσω του σχήματος 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, ισχύουν οι ακόλουθες ιδιότητες για ακολουθίες πολλών μπάϊτς:
Το 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 χαρακτήρες. [Επεξεργασία] Μακρείς φόρμες , μη-έγκυρη είσοδος,και θέματα ασφάλειαςΗ ακριβή απόκριση ενός αποκωδικοποιητή σε μη-έγκυρη είδοσο είναι ακαθόριστη σε εκτεταμένο βαθμό. Υπάρχουν πολλοί τρόποι με τους οποίους ένας αποκωδικοποιητής μπορεί να αποκριθεί σε μη-έγκυρη είσοδο:
(συχνά Latin-1 ή το τοπικό σύνολο χαρακτήρων), κάτι που συμβαίνει σε εφαρμογές όπως IRC όπου το UTF-8 δεν είναι καθολικά αποδεκτό και δεν υπάρχει ενσωματομένος στο πρόγραμμα τρόπος για να καθοριστεί το σύνολο χαρακτήρων.
[Επεξεργασία] Δες επίσης
[Επεξεργασία] Εξωτερικοί σύνδεσμοι
|