Γιατί χρειάζεστε κωδικοποίηση;
Η μικρότερη μονάδα αποθήκευσης στον υπολογιστή είναι byte (byte) και ο αριθμός των χαρακτήρων που μπορούν να αναπαρασταθούν από ένα byte είναι περιορισμένος, 1byte=8bit, ένα byte μπορεί να αντιπροσωπεύει μόνο 255 χαρακτήρες το πολύ, και υπάρχουν πολλές γλώσσες στον κόσμο, υπάρχουν διάφοροι χαρακτήρες, οι οποίοι δεν μπορούν να αναπαρασταθούν από ένα byte, επομένως ο χαρακτήρας αναπαράστασης char στην Java είναι για να λύσει αυτό το πρόβλημα κωδικοποίησης, ένας χαρακτήρας καταλαμβάνει δύο byte, επομένως πρέπει να κωδικοποιηθεί μεταξύ του char και του μικρότερου byte μονάδας. Το αντίθετο είναι η αποκωδικοποίηση.
Στην πραγματικότητα, η κωδικοποίηση και η αποκωδικοποίηση είναι η ολοκληρωμένη διαδικασία μετάφρασης (η «μετάφραση» είναι εύκολα κατανοητή) και διάφορες μέθοδοι κωδικοποίησης είναι λεξικά.
1. Κωδικός ASCII
Το πλήρες όνομα είναι American Standard Code for Information Interchange, το οποίο είναι το πιο κοινό σύστημα κωδικοποίησης ενός byte στον κόσμο, που χρησιμοποιείται κυρίως για την εμφάνιση σύγχρονων αγγλικών και άλλων δυτικοευρωπαϊκών γλωσσών.
Ο κώδικας ASCII αντιπροσωπεύεται από 7 bit, τα οποία μπορούν να αντιπροσωπεύουν μόνο 128 χαρακτήρες και το 0~31 αντιπροσωπεύει χαρακτήρες ελέγχου όπως enter, backspace, delete κ.λπ. 32~126 σημαίνει ότι οι εκτυπωμένοι χαρακτήρες μπορούν να εισαχθούν μέσω του πληκτρολογίου και να εμφανιστούν.
Μεταξύ αυτών, το 48~57 είναι 0 έως 9 δέκα αραβικοί αριθμοί, το 65~90 είναι 26 κεφαλαία αγγλικά γράμματα, το 97~122 είναι 26 πεζά αγγλικά γράμματα και τα υπόλοιπα είναι μερικά σημεία στίξης, σύμβολα λειτουργίας κ.λπ., τα οποία μπορούν να ανατρέξουν στον τυπικό πίνακα ASCII για λεπτομέρειες.
2, ISO-8859-1
Αυτή η κωδικοποίηση είναι μια επέκταση της κωδικοποίησης ASCII, αλλά εξακολουθεί να είναι κωδικοποίηση ενός byte και μπορεί να αντιπροσωπεύει συνολικά μόνο 256 χαρακτήρες.
Δεδομένου ότι το ASCII μπορεί να αντιπροσωπεύει μόνο 128 χαρακτήρες, η οθόνη δεν μπορεί να εκφραστεί πλήρωςΤο ISO-8859-1 επεκτείνει την κωδικοποίηση ASCIIΠάνω από τον κώδικα ASCII, προστίθενται τα αντίστοιχα σύμβολα κειμένου των γλωσσών της Δυτικής Ευρώπης, Ελληνικά, Ταϊλανδέζικα, Αραβικά και Εβραϊκά, και είναι συμβατό με την κωδικοποίηση ASCII.
3, ΜΒ2312
Το πλήρες όνομα του GB2312 είναι "Information Technology Chinese Encoding Character Set", το οποίο είναι μια κωδικοποίηση δύο byte με εύρος κωδικοποίησης A1-F7, εκ των οποίων το A1-A9 είναι η περιοχή συμβόλων, που περιέχει συνολικά 682 σύμβολα. Το B0-F7 είναι η περιοχή kanji, που περιέχει 6763 kanji.
Το πλήρες όνομα είναι σύνολο κινεζικών χαρακτήρων για ανταλλαγή πληροφοριών, το οποίο κυκλοφόρησε από την Κίνα το 1980 και χρησιμοποιείται κυρίως για την επεξεργασία κινεζικών χαρακτήρων σε συστήματα υπολογιστών. Το GB2312 περιέχει κυρίως 6763 κινεζικούς χαρακτήρες και 682 σύμβολα.
Το GB2312 καλύπτει το μεγαλύτερο μέρος της χρήσης κινεζικών χαρακτήρων, αλλά δεν μπορεί να χειριστεί ειδικούς σπάνιους χαρακτήρες όπως τα αρχαία κινέζικα, επομένως κωδικοί όπως GBK και GB18030 εμφανίστηκαν αργότερα.
4, GBK
Το πλήρες όνομα του GBK είναι το "Chinese Character Internal Code Extension Specification", το οποίο φάνηκε να επεκτείνει το GB2312, το εύρος κωδικοποίησής του είναι 8140-FEFE (αφαιρέστε το XX7F), με συνολικά 23940 bit κώδικα, τα οποία μπορούν να αντιπροσωπεύουν 21003 κινεζικούς χαρακτήρες και η κωδικοποίησή του είναι συμβατή με το GB2312
Το GBK, το πλήρες όνομα της Κινεζικής Προδιαγραφής Εσωτερικού Κώδικα, διατυπώθηκε το 1995. Επεκτείνει κυρίως το GB2312 και προσθέτει περισσότερους κινεζικούς χαρακτήρες στη βάση του, η οποία περιέχει συνολικά 21,003 κινεζικούς χαρακτήρες.
Το GBK είναι συμβατό με την κωδικοποίηση GB2312, πράγμα που σημαίνει ότι οι κινεζικοί χαρακτήρες που κωδικοποιούνται στο GB2312 μπορούν να αποκωδικοποιηθούν κανονικά με GBK και δεν θα εμφανίζονται αλλοιωμένοι, αλλά οι κινεζικοί χαρακτήρες που κωδικοποιούνται με GBK δεν αποκωδικοποιούνται απαραίτητα με GB2312.
5, GB18030
GB18030 πλήρες όνομα είναι το Chinese Character Internal Code Extension Specification, το οποίο είναι το πιο πρόσφατο σύνολο χαρακτήρων εσωτερικού κώδικα που κυκλοφόρησε το 2000 και τέθηκε σε ισχύ το 2001, συμπεριλαμβανομένων των γλωσσικών χαρακτήρων των περισσότερων εθνοτικών μειονοτήτων στην Κίνα, και περιέχει περισσότερους από 70.000 κινεζικούς χαρακτήρες.
Χρησιμοποιεί κυρίως κωδικοποίηση χαρακτήρων ενός byte, διπλού byte και τεσσάρων byte και είναι συμβατό με GB2312 και GBK, αν και είναι υποχρεωτικό πρότυπο στη χώρα μας, αλλά σπάνια χρησιμοποιείται στην πραγματική παραγωγή και τα πιο χρησιμοποιούμενα είναι GBK και GB2312.
6.UNICODE
Προκειμένου η γλώσσα τους να εμφανίζεται κανονικά στον υπολογιστή, κάθε χώρα και περιοχή έχει τον δικό της κωδικό, επομένως κανείς δεν γνωρίζει ο ένας τον κωδικό του άλλου εάν υπάρχουν πάρα πολλοί κωδικοί, αυτή τη στιγμή ο οργανισμός ISO πρότεινε έναν νέο κώδικα που ονομάζεται κωδικοποίηση UNICODE για την υποστήριξη παγκόσμιων πολιτισμών, χαρακτήρων και συμβόλων. Όταν διατυπώθηκε το UNICODE, η χωρητικότητα του υπολογιστή δεν ήταν πλέον πρόβλημα, επομένως σχεδιάστηκε για να διορθωθεί δύο byte και όλοι οι χαρακτήρες αντιπροσωπεύονταν σε 16 bit, συμπεριλαμβανομένων των αγγλικών χαρακτήρων που καταλάμβαναν μόνο 8 bit πριν, επομένως θα προκαλούσε σπατάλη χώρου και το UNICODE δεν προωθήθηκε και εφαρμόστηκε για μεγάλο χρονικό διάστημα.
7, UTF-16
Η εμφάνιση του UTF-16 είναι ISO για τη δημιουργία ενός νέου υπεργλωσσικού λεξικού, μέσω του οποίου όλες οι γλώσσες στον κόσμο μπορούν να μεταφράσουν η μία την άλλη, μπορείτε να φανταστείτε πόσο περίπλοκο και τεράστιο είναι αυτό το λεξικό. Το UTF-16 χρησιμοποιεί δύο byte για να αναπαραστήσει τη μορφή μετατροπής Unicode (δύο byte είναι 16 bit, άρα το UTF-16) είναι μια μέθοδος αναπαράστασης σταθερού μήκους, δηλαδή, οποιοσδήποτε χαρακτήρας μπορεί να αναπαρασταθεί σε δύο byte. Αυτό καθιστά πολύ βολική την αναπαράσταση χαρακτήρων. Ωστόσο, υπάρχει επίσης ένα ελάττωμα, δηλαδή, ένα μεγάλο μέρος των χαρακτήρων μπορεί να αναπαρασταθεί σε ένα byte, αλλά το UTF-16 χρησιμοποιεί δύο byte, κάτι που είναι σπατάλη χώρου αποθήκευσης. Υπάρχει λοιπόν ένας άλλος τρόπος κωδικοποίησης, ο οποίος είναι ο UTF-8.
Το UTF-16 είναι η συγκεκριμένη υλοποίηση του UNICODE, το 16 είναι 16 bit, το UTF-16 είναι η προέλευση, που καθορίζει τον τρόπο αποθήκευσης των χαρακτήρων UNICODE στον υπολογιστή, το UTF-16 χρησιμοποιεί επίσης δύο byte για να αναπαραστήσει οποιονδήποτε χαρακτήρα, γεγονός που καθιστά τη συμβολοσειρά λειτουργίας πολύ αποτελεσματική, γεγονός που είναι επίσης ένας σημαντικός λόγος για τον οποίο η java χρησιμοποιεί το UTF-16 ως μορφή αποθήκευσης χαρακτήρων στη μνήμη.
Το UTF-16 είναι κατάλληλο για χρήση μεταξύ δίσκου και μνήμης και η μετατροπή χαρακτήρων και byte μεταξύ τους θα είναι απλούστερη και πιο αποτελεσματική, αλλά δεν είναι κατάλληλη για μετάδοση δικτύου, γεγονός που μπορεί να βλάψει τη ροή byte.
8, UTF-8
Το UTF-8 χρησιμοποιεί μια τεχνολογία μεταβλητού μήκους όπου κάθε περιοχή κωδικοποίησης έχει διαφορετικά μήκη κώδικα και διαφορετικοί τύποι χαρακτήρων μπορούν να αποτελούνται από 1-6 byte.
Οι κανόνες κωδικοποίησης για το UTF-8 είναι οι εξής:
1) Εάν είναι 1 byte και το υψηλότερο bit είναι 0, σημαίνει ότι πρόκειται για 1 χαρακτήρα ASCII. Μπορεί να φανεί ότι όλες οι κωδικοποιήσεις ASCII είναι ήδη UTF-8
2) Εάν είναι 1 byte, ξεκινώντας από το 11, ο αριθμός των διαδοχικών 1 υποδηλώνει τον αριθμό των byte αυτού του χαρακτήρα, για παράδειγμα: 110xxxxx σημαίνει ότι είναι το πρώτο byte ενός χαρακτήρα UTF-8 διπλού byte
3) Εάν είναι 1 byte, ξεκινώντας από το 10, σημαίνει ότι δεν είναι το πρώτο byte, πρέπει να ανυπομονείτε για να λάβετε το πρώτο byte του τρέχοντος χαρακτήρα.
Αν και το UTF-16 είναι πολύ αποτελεσματικό, είναι επίσης το μεγαλύτερο μειονέκτημα του UNICODE, έτσι ώστε όλοι οι χαρακτήρες ενός byte πρέπει να αντιστοιχούν σε δύο byte και ο αποθηκευτικός χώρος διπλασιάζεται, κάτι που προφανώς καταναλώνει πόρους και δεν συμμορφώνεται με την τρέχουσα κατάσταση της ταχείας ανάπτυξης του Διαδικτύου. Έτσι, με το UTF-8, είναι μια υλοποίηση κωδικοποίησης χαρακτήρων μεταβλητού μήκους του UNICODE, η οποία μπορεί να χρησιμοποιήσει 1~6 byte σταθερού μήκους για την κωδικοποίηση χαρακτήρων UNICODE.
Το UTF-8 χρησιμοποιεί αποθήκευση ενός byte για χαρακτήρες ASCII και εάν ένας μεμονωμένος χαρακτήρας είναι κατεστραμμένος, δεν θα επηρεάσει τους επόμενους χαρακτήρες, επομένως το UTF-8 είναι ιδανικό για παραδοσιακά στον Ιστό και είναι μια από τις πιο ευρέως χρησιμοποιούμενες κωδικοποιήσεις σήμερα.
Εάν θέλετε να αναπαραστήσετε κινέζικα, η απόδοση κωδικοποίησης UTF-8 είναι μεγαλύτερη από το GBK και μικρότερη από το UTF-16, επομένως είναι επίσης η πιο ιδανική μέθοδος κωδικοποίησης εκτός από το GBK. |