Waarom heb je codering nodig?
De kleinste opslageenheid in de computer is byte (byte), en het aantal tekens dat door een byte kan worden weergegeven is beperkt, 1byte=8bit, een byte kan maximaal 255 tekens vertegenwoordigen, en er zijn veel talen in de wereld, er zijn verschillende tekens die niet door een byte kunnen worden weergegeven, dus het char-representatieteken in Java is om dit coderingsprobleem op te lossen, één char neemt twee bytes in beslag, dus moet het gecodeerd worden tussen char en de kleinste eenheidsbyte. Het tegenovergestelde is decoderen.
In feite is codering en decoderen het voltooide vertaalproces ("vertaling" is gemakkelijk te begrijpen), en verschillende coderingsmethoden zijn woordenboeken.
1. ASCII-code
De volledige naam is American Standard Code for Information Interchange, het meest gebruikte single-byte coderingssysteem ter wereld, voornamelijk gebruikt om modern Engels en andere West-Europese talen weer te geven.
ASCII-code wordt weergegeven door 7 bits, die slechts 128 tekens kunnen weergeven, en 0~31 staat voor controletekens zoals enter, backspace, delete, enzovoort; 32~126 betekent dat de geprinte tekens via het toetsenbord kunnen worden ingevoerd en kunnen worden weergegeven.
Hiervan zijn 48~57 0 tot 9 tien Arabische cijfers, 65~90 zijn 26 hoofdletters Engels, 97~122 zijn 26 kleine Engelse letters, en de rest zijn enkele leestekens, operatiesymbolen, enzovoort, die kunnen verwijzen naar de ASCII-standaardtabel voor details.
2、ISO-8859-1
Deze codering is een uitbreiding van de ASCII-codering, maar het blijft een single-byte codering en kan slechts in totaal 256 tekens weergeven.
Omdat ASCII slechts 128 tekens kan weergeven, kan het display niet volledig worden uitgedruktISO-8859-1 breidt ASCII-codering uitBovenop de ASCII-code worden de bijbehorende tekstsymbolen van West-Europese talen, Grieks, Thais, Arabisch en Hebreeuws, toegevoegd, en het is achterwaarts compatibel met ASCII-codering.
3、GB2312
De volledige naam van GB2312 is "Information Technology Chinese Encoding Character Set", een codering van twee bytes met een coderingsbereik van A1-F7, waarvan A1-A9 het symboolgebied is, met in totaal 682 symbolen; B0-F7 is het kanji-gebied en bevat 6763 kanji.
De volledige naam is een Chinese karakterset voor informatie-uitwisseling, die in 1980 door China werd uitgebracht en voornamelijk wordt gebruikt voor Chinese karakterverwerking in computersystemen. GB2312 bevat voornamelijk 6763 Chinese tekens en 682 symbolen.
GB2312 dekt het grootste deel van het gebruik van Chinese karakters, maar kan geen speciale zeldzame tekens zoals het oude Chinees verwerken, dus codes zoals GBK en GB18030 verschenen later.
4、GBK
De volledige naam van GBK is de "Chinese Character Internal Code Extension Specification", die de GB2312 leek uit te breiden, het coderingsbereik is 8140-FEFE (verwijder XX7F), met in totaal 23940 codebits, die 21003 Chinese karakters kunnen weergeven, en de codering is compatibel met GB2312
GBK, de volledige naam van de Chinese Interne Code-specificatie, werd in 1995 geformuleerd. Het breidt voornamelijk GB2312 uit en voegt meer Chinese karakters toe op basis daarvan, die in totaal 21.003 Chinese karakters bevat.
GBK is achterwaarts compatibel met GB2312-codering, wat betekent dat de Chinese karakters die in GB2312 zijn gecodeerd normaal met GBK kunnen worden gedecodeerd en niet onverstaanbaar zullen zijn, maar de Chinese karakters die met GBK zijn gecodeerd niet noodzakelijkerwijs met GB2312 worden gedecodeerd.
5、GB18030
GB18030 volledige naam is de Chinese Character Internal Code Extension Specification, de nieuwste interne codetekenset die in 2000 werd uitgebracht en in 2001 werd ingevoerd, inclusief de taalkarakters van de meeste etnische minderheden in China, en bevat meer dan 70.000 Chinese karakters.
Het gebruikt voornamelijk single-byte, double-byte en four-byte tekencodering, en is achterwaarts compatibel met GB2312 en GBK, hoewel het een verplichte standaard is in ons land, maar het wordt zelden gebruikt in de daadwerkelijke productie, en de meest gebruikte zijn GBK en GB2312.
6.UNICODE
Om hun taal normaal in de computer weer te geven, heeft elk land en regio zijn eigen code, zodat niemand elkaars code kent als er te veel codes zijn, stelde de ISO-organisatie op dit moment een nieuwe code voor genaamd UNICODE-codering om wereldwijde culturen, tekens en symbolen te ondersteunen. Toen UNICODE werd opgesteld, was de computercapaciteit geen probleem meer, dus werd het ontworpen om twee bytes vast te leggen, en alle tekens werden weergegeven in 16 bits, inclusief Engelse tekens die eerder slechts 8 bits innamen, waardoor het tot ruimteverspilling leidde, en UNICODE werd lange tijd niet gepromoot en toegepast.
7、UTF-16
De opkomst van UTF-16 is ISO om een nieuw supralinguaal woordenboek te creëren, waarmee alle talen ter wereld elkaar kunnen vertalen; je kunt je voorstellen hoe complex en enorm dit woordenboek is. UTF-16 gebruikt twee bytes om het Unicode-conversieformaat weer te geven (twee bytes zijn 16 bits, dus UTF-16) is een representatiemethode met vaste lengte, dat wil zeggen, elk teken kan in twee bytes worden weergegeven. Dit maakt het erg handig om personages weer te geven. Er is echter ook een zwakte, namelijk dat een groot deel van de tekens in één byte kan worden weergegeven, maar UTF-16 gebruikt twee bytes, wat een verspilling van opslagruimte is. Er is dus een andere manier van coderen, namelijk UTF-8.
UTF-16 is de specifieke implementatie van UNICODE, 16 is 16 bits, UTF-16 is de oorsprong en definieert hoe UNICODE-tekens in de computer worden opgeslagen, UTF-16 gebruikt ook twee bytes om elk teken te representeren, wat de bewerkingsreeks zeer efficiënt maakt, wat ook een belangrijke reden is waarom Java UTF-16 gebruikt als formaat voor tekens om in het geheugen op te slaan.
UTF-16 is geschikt voor gebruik tussen schijf en geheugen, en de omzetting van tekens en bytes naar en van elkaar zal eenvoudiger en efficiënter zijn, maar het is niet geschikt voor netwerktransmissie, omdat dit de bytestroom kan beschadigen.
8、UTF-8
UTF-8 gebruikt een variabele lengte technologie waarbij elk coderingsgebied verschillende codeerlengtes heeft, en verschillende soorten tekens kunnen bestaan uit 1-6 bytes.
De coderingsregels voor UTF-8 zijn als volgt:
1) Als het 1 byte is en het hoogste bit 0, betekent dit dat dit 1 ASCII-teken is. Je kunt zien dat alle ASCII-coderingen al UTF-8 zijn
2) Als het 1 byte is, beginnend met 11, impliceert het aantal opeenvolgende 1's het aantal bytes van dit teken, bijvoorbeeld: 110xxxxx betekent dat het de eerste byte is van een dubbelbyte UTF-8 karakter
3) Als het 1 byte is, beginnend met 10, betekent dit dat het niet de eerste byte is, je moet vooruitkijken om de eerste byte van het huidige teken te krijgen.
Hoewel UTF-16 zeer efficiënt is, is het ook het grootste nadeel van UNICODE, omdat alle enkelbytetekens rekening moeten houden met twee bytes, en de opslagruimte verdubbeld wordt, wat uiteraard middelen verbruikt en niet voldoet aan de huidige situatie van snelle ontwikkeling van het internet. Dus met UTF-8 is het een implementatie van variabele lengte tekencodering van UNICODE, die 1~6 bytes met vaste lengte kan gebruiken om UNICODE-tekens te coderen.
UTF-8 gebruikt single-byte opslag voor ASCII-tekens, en als één teken beschadigd raakt, beïnvloedt dit de volgende tekens niet, dus UTF-8 is ideaal voor traditionele online en is een van de meest gebruikte coderingen van vandaag.
Als je Chinees wilt weergeven, is de efficiëntie van UTF-8 codering groter dan GBK en kleiner dan UTF-16, dus het is ook de meest ideale coderingsmethode naast GBK. |