Domača » kako » Zakaj angleški znaki potrebujejo manj bajtov, da jih predstavljajo kot znake v drugih abecedah?

    Zakaj angleški znaki potrebujejo manj bajtov, da jih predstavljajo kot znake v drugih abecedah?

    Čeprav večina od nas verjetno nikoli ni prenehala razmišljati o tem, abecedni znaki niso vse enake velikosti v številu bajtov, ki jih potrebujemo za njihovo predstavitev. Toda zakaj je to? Današnja postavka SuperUser Q&A ima odgovore na zanimivo vprašanje bralca.

    Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.

    Delna slika zaslona ASCII z dovoljenjem Wikipedije.

    Vprašanje

    Bralnik SuperUser khajvah želi vedeti, zakaj različne abecede zavzamejo različne količine diskovnega prostora:

    Ko v besedilno datoteko postavim 'a' in jo shranim, je velikost 2 bajta. Toda, ko vnesem znak, kot je 'ա' (črka iz armenske abecede), je velikost 3 bajtov.

    Kakšna je razlika med abecedami na računalniku? Zakaj angleščina zavzema manj prostora pri shranjevanju?

    Črke so črke, kajne? Morda pa tudi ne! Kaj je odgovor na to abecedno skrivnost?

    Odgovor

    SuperUser prispevki Doktoro Reichard in ernie imajo odgovor za nas. Prvič, Doktoro Reichard:

    Ena od prvih shem kodiranja, ki jih je treba razviti za uporabo v glavnih računalnikih, je ASCII (American Standard Code za izmenjavo informacij) standard. Razvita je bila v šestdesetih letih prejšnjega stoletja v ZDA.

    Angleška abeceda uporablja del latinske abecede (na primer, v angleščini je nekaj naglašenih besed). V abecedi je 26 posameznih črk, ki ne upoštevajo primera. Prav tako bi morali obstajati posamezne številke in ločila v kateri koli shemi, ki se pretvarja, da kodira angleško abecedo.

    Šestdeseta leta so bili tudi čas, ko računalniki niso imeli toliko pomnilnika ali prostora na disku, kot ga imamo zdaj. ASCII je bil razvit kot standardna predstavitev funkcionalne abecede na vseh ameriških računalnikih. Takrat je bila odločitev, da se vsak ASCII znak 8 bitov (1 bajt) dolga, naredila zaradi tehničnih podrobnosti časa (v članku iz Wikipedije je omenjeno, da je perforiran trak držal 8 bitov na mestu). Pravzaprav se lahko prvotna shema ASCII prenese z uporabo 7 bitov, osmo pa se lahko uporabi za preverjanje paritete. Kasnejši razvoj je razširil prvotno shemo ASCII na več znakov z naglasi, matematiko in terminali.

    Zaradi nedavnega povečanja uporabe računalnikov po vsem svetu je vedno več ljudi iz različnih jezikov imelo dostop do računalnika. To je pomenilo, da je bilo treba za vsak jezik razviti nove sheme kodiranja, neodvisno od drugih shem, ki bi bile v nasprotju, če bi jih prebrali iz različnih jezikovnih terminalov..

    Unicode je nastal kot rešitev za obstoj različnih terminalov z združitvijo vseh možnih pomembnih znakov v en sam abstraktni nabor znakov..

    UTF-8 je en način za kodiranje nabora znakov Unicode. To je kodiranje s spremenljivo širino (tj. Različni znaki imajo lahko različne velikosti) in je bilo zasnovano za povratno združljivost s prejšnjo shemo ASCII. Kot taka bo nabor znakov ASCII ostal velikosti enega bajta, medtem ko so vsi drugi znaki velikosti dveh ali več bajtov. UTF-16 je še en način za kodiranje nabora znakov Unicode. V primerjavi z UTF-8 so znaki kodirani kot niz ene ali dveh 16-bitnih kodnih enot.

    Kot je navedeno v drugih komentarjih, znak "a" zavzema en bajt, medtem ko "ա" zavzema dva bajta, kar označuje kodiranje UTF-8. Dodatni bajt v izvirnem vprašanju je bil posledica obstoja znaka za novo vrstico na koncu.

    Sledi odgovor ernieja:

    1 bajt je 8 bitov in lahko predstavlja do 256 (2 ^ 8) različnih vrednosti.

    Za jezike, ki zahtevajo več možnosti od tega, preprosto preslikava od 1 do 1 ni mogoče ohraniti, zato je za shranjevanje znakov potrebnih več podatkov.

    Upoštevajte, da večina kodiranj običajno uporablja prvih 7 bitov (128 vrednosti) za znake ASCII. To pušča osem bitov ali 128 več vrednosti za več znakov. Dodajte naglašene znake, azijske jezike, cirilico itd. In preprosto lahko vidite, zakaj 1 bajt ni dovolj za zadrževanje vseh znakov.


    Imate kaj dodati pojasnilu? Zvok v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.