Prečo potrebuješ kódovanie?
Najmenšia pamäťová jednotka v počítači je bajt (bajt) a počet znakov, ktoré môže byť reprezentovaný bajtom, je obmedzený – 1 bajt = 8bit, bajt môže reprezentovať maximálne 255 znakov, a na svete existuje mnoho jazykov, existuje niekoľko znakov, ktoré nemožno reprezentovať bajtom, takže znak reprezentácie char v Jave je určený na vyriešenie tohto kódovacieho problému, jeden char zaberá dva bajty, takže musí byť zakódovaný medzi char a najmenším jednotkovým bajtom. Opakom je dekódovanie.
V skutočnosti je kódovanie a dekódovanie dokončeným procesom prekladu ("preklad" je ľahko pochopiteľný) a rôzne kódovacie metódy sú slovníky.
1. ASCII kód
Celý názov je American Standard Code for Information Interchange, čo je najbežnejší jednobajtový kódovací systém na svete, používaný najmä na zobrazovanie modernej angličtiny a ďalších západoeurópskych jazykov.
ASCII kód je reprezentovaný 7 bitmi, ktoré môžu reprezentovať iba 128 znakov, a 0~31 predstavuje riadiace znaky ako enter, backspace, delete a pod.; 32~126 znamená, že vytlačené znaky je možné zadať cez klávesnicu a zobraziť ich.
Medzi nimi je 48~57 desať arabských číslic od 0 do 9, 65~90 je 26 veľkých anglických písmen, 97~122 je 26 malých anglických písmen a zvyšok sú niektoré interpunkčné znamienka, symboly operácií a podobne, ktoré môžu odkazovať na ASCII štandardnú tabuľku pre podrobnosti.
2、ISO-8859-1
Toto kódovanie je rozšírením ASCII kódovania, ale stále ide o jednobajtové kódovanie a dokáže reprezentovať celkovo len 256 znakov.
Keďže ASCII dokáže reprezentovať len 128 znakov, displej nemožno úplne vyjadriťISO-8859-1 rozširuje kódovanie ASCIINad ASCII kódom sú pridané zodpovedajúce textové symboly západoeurópskych jazykov, gréčtiny, thajčiny, arabčiny a hebrejčiny, a je spätne kompatibilný s ASCII kódovaním.
3、GB2312
Plný názov GB2312 je "Information Technology Chinese Encoding Character Set", čo je dvojbajtové kódovanie s rozsahom kódovania A1-F7, pričom A1-A9 je oblasť symbolov, obsahujúca celkovo 682 symbolov; B0-F7 je oblasť kanji, obsahujúca 6763 kanji.
Celý názov je čínska znaková sada pre výmenu informácií, ktorú Čína vydala v roku 1980 a používa sa hlavne na spracovanie čínskych znakov v počítačových systémoch. GB2312 obsahuje hlavne 6763 čínskych znakov a 682 symbolov.
GB2312 pokrýva väčšinu používania čínskych znakov, ale nedokáže zvládnuť špeciálne vzácne znaky, ako je staročínština, takže kódy ako GBK a GB18030 sa objavili neskôr.
4、GBK
Plný názov GBK je "Chinese Character Internal Code Extension Specification", ktorý sa zdal rozširovať GB2312, jeho kódovací rozsah je 8140-FEFE (odstrániť XX7F), s celkovým počtom 23940 kódových bitov, ktoré môžu reprezentovať 21003 čínskych znakov, a jeho kódovanie je kompatibilné s GB2312
GBK, plný názov Čínskej internej špecifikácie kódu, bol formulovaný v roku 1995. Hlavne rozširuje GB2312 a pridáva viac čínskych znakov na svojom základe, ktorý obsahuje celkovo 21 003 čínskych znakov.
GBK je spätne kompatibilný s kódovaním GB2312, čo znamená, že čínske znaky zakódované v GB2312 je možné normálne dekódovať pomocou GBK a nebudú sa zdať nezrozumiteľné, ale čínske znaky kódované v GBK nie sú nevyhnutne dekódované s GB2312.
5、GB18030
GB18030 plný názov je Chinese Character Internal Code Extension Specification, čo je najnovšia interná kódová sada vydaná v roku 2000 a vynucovaná v roku 2001, vrátane jazykových znakov väčšiny etnických menšín v Číne a obsahuje viac ako 70 000 čínskych znakov.
Používa hlavne jednobajtové, dvojbajtové a štvorbajtové kódovanie znakov a je spätne kompatibilný s GB2312 a GBK, hoci je to povinný štandard v našej krajine, no v skutočnej produkcii sa zriedka používa a najčastejšie sú GBK a GB2312.
6. UNICODE
Aby sa ich jazyk normálne zobrazoval v počítači, každá krajina a región má svoj vlastný kód, takže nikto nepozná kód toho druhého, ak je kódov príliš veľa, v tom čase organizácia ISO navrhla nový kód nazvaný UNICODE coding na podporu globálnych kultúr, znakov a symbolov. Keď bol UNICODE formulovaný, kapacita počítača už nebola problémom, preto bol navrhnutý tak, aby bol pevne nastavený na dva bajty a všetky znaky boli reprezentované v 16 bitoch, vrátane anglických znakov, ktoré predtým zaberali len 8 bitov, takže by to znamenalo zbytočné plytvanie miestom, a UNICODE nebol dlhodobo propagovaný a používaný.
7、UTF-16
Vznik UTF-16 je ISO na vytvorenie nového nadjazyčného slovníka, cez ktorý sa môžu všetky jazyky sveta navzájom prekladať, viete si predstaviť, aký zložitý a obrovský tento slovník je. UTF-16 používa dva bajty na reprezentáciu formátu konverzie Unicode (dva bajty majú 16 bitov, takže UTF-16) je metóda reprezentácie s pevnou dĺžkou, teda akýkoľvek znak môže byť reprezentovaný v dvoch bajtoch. Vďaka tomu je veľmi pohodlné reprezentovať postavy. Existuje však aj chyba, že veľká časť znakov sa dá reprezentovať v jednom bajte, ale UTF-16 používa dva bajty, čo je plytvanie úložným priestorom. Existuje ďalší spôsob kódovania, ktorým je UTF-8.
UTF-16 je špecifická implementácia UNICODE, 16 je 16 bitov, UTF-16 je pôvod, ktorý definuje, ako sa UNICODE znaky ukladajú v počítači, UTF-16 tiež používa dva bajty na reprezentáciu akéhokoľvek znaku, čo robí operačný reťazec veľmi efektívnym, čo je tiež dôležitý dôvod, prečo Java používa UTF-16 ako formát pre ukladanie znakov do pamäte.
UTF-16 je vhodný na použitie medzi diskom a pamäťou a prevod znakov a bajtov medzi sebou a medzi sebou bude jednoduchší a efektívnejší, ale nie je vhodný na sieťový prenos, ktorý by mohol poškodiť bajtový tok.
8、UTF-8
UTF-8 používa technológiu s premenlivou dĺžkou, kde každá kódovacia oblasť má inú dĺžku kódu a rôzne typy znakov môžu pozostávať z 1-6 bajtov.
Pravidlá kódovania pre UTF-8 sú nasledovné:
1) Ak je to 1 bajt a najvyšší bit je 0, znamená to, že ide o 1 ASCII znak. Je vidieť, že všetky ASCII kódovania sú už UTF-8
2) Ak je to 1 bajt, začínajúc na 11, počet po sebe idúcich 1 znamená počet bajtov tohto znaku, napríklad: 110xxxxx znamená, že je to prvý bajt dvojbajtového znaku UTF-8
3) Ak je to 1 bajt, začínajúc na 10, znamená to, že to nie je prvý bajt, musíte sa pozerať dopredu, aby ste získali prvý bajt aktuálneho znaku.
Hoci je UTF-16 veľmi efektívny, je to zároveň najväčšia nevýhoda UNICODE, pretože všetky jednobajtové znaky musia zaberať dva bajty a úložný priestor sa zdvojnásobuje, čo zjavne spotrebúva zdroje a nezodpovedá súčasnej situácii rýchleho rozvoja internetu. Takže s UTF-8 ide o implementáciu kódovania znakov s premenlivou dĺžkou v UNICODE, ktoré môže použiť 1~6 bajtov pevnej dĺžky na kódovanie znakov UNICODE.
UTF-8 používa jednobajtové úložisko pre ASCII znaky a ak je jeden znak poškodený, neovplyvní to ďalšie znaky, takže UTF-8 je ideálny pre tradičné webové kódovanie a patrí medzi najpoužívanejšie kódovania dnes.
Ak chcete reprezentovať čínštinu, efektivita kódovania UTF-8 je vyššia ako GBK a menšia ako UTF-16, takže je to tiež najideálnejšia metóda kódovania okrem GBK. |