Početna » kako da » Zašto engleskim likovima treba manje bajtova da ih predstavljaju od znakova u drugim pismima?

    Zašto engleskim likovima treba manje bajtova da ih predstavljaju od znakova u drugim pismima?

    Iako većina nas vjerojatno nikada nije prestala razmišljati o tome, abecedni znakovi nisu jednake veličine u broju bajtova koje je potrebno za njihovo predstavljanje. Ali zašto? Današnja postova s ​​pitanjima o odgovorima korisnika imaju odgovore na znatiželjno pitanje čitatelja.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Djelomična slika zaslona ASCII grafikona zahvaljujući Wikipediji.

    Pitanje

    Čitač SuperUser khajvah želi znati zašto različite abecede zauzimaju različite količine diskovnog prostora kada su spremljene:

    Kada stavim "a" u tekstualnu datoteku i spremim je, ona je veličine 2 bajta. Ali kada stavim znak poput 'ա' (slovo iz armenske abecede), veličina je 3 bajta.

    Koja je razlika između pisma na računalu? Zašto engleski jezik zauzima manje prostora pri spremanju?

    Slova su slova, zar ne? Možda ne! Što je odgovor na ovu abecednu tajnu?

    Odgovor

    SuperUser suradnici Doktoro Reichard i ernie imaju odgovor za nas. Prvo gore, Doktoro Reichard:

    Jedna od prvih shema kodiranja koja će se razviti za upotrebu u glavnim računalima je ASCII (American Standard Code za razmjenu informacija) standard. Razvijen je 1960-ih u SAD-u.

    Engleska abeceda koristi dio latinske abecede (na primjer, na engleskom jeziku ima nekoliko naglašenih riječi). Postoji 26 pojedinačnih slova u toj abecedi, ne uzimajući u obzir slučaj. Također bi trebale postojati pojedinačni brojevi i znakovi interpunkcije u bilo kojoj shemi koja se pretvara da kodira englesku abecedu.

    Šezdesete su također bile vrijeme kada računala nisu imala količinu memorije ili prostora na disku koji sada imamo. ASCII je razvijen kao standardna reprezentacija funkcionalne abecede na svim američkim računalima. U to je vrijeme odluka o tome da svaki ASCII znak napravi 8 bita (1 bajt) duga napravljena zbog tehničkih detalja vremena (članak u Wikipediji spominje činjenicu da je perforirana traka držala 8 bita u položaju u isto vrijeme). Zapravo, izvorna ASCII shema se može prenijeti pomoću 7 bita, a osmi se može koristiti za provjere pariteta. Kasnija dešavanja proširila su izvornu ASCII shemu na nekoliko znakova s ​​naglaskom, matematikom i terminalima.

    S nedavnim povećanjem korištenja računala diljem svijeta, sve više i više ljudi s različitih jezika imalo je pristup računalu. To je značilo da se za svaki jezik moraju razviti nove sheme kodiranja, neovisno o drugim shemama, koje bi se sukobljavale ako bi se čitale s različitih jezičnih terminala..

    Unicode je nastao kao rješenje za postojanje različitih terminala spajanjem svih mogućih značajnih znakova u jedan apstraktni skup znakova.

    UTF-8 je jedan od načina za kodiranje Unicode skupa znakova. To je kodiranje s promjenjivom širinom (tj. Različiti znakovi mogu imati različite veličine) i on je dizajniran za kompatibilnost s prethodnom ASCII shemom. Kao takav, ASCII skup znakova ostaje jedan bajt u veličini, dok su svi drugi znakovi veličine dva ili više bajtova. UTF-16 je još jedan način za kodiranje Unicode skupa znakova. U usporedbi s UTF-8, znakovi se kodiraju kao skup od jedne ili dvije 16-bitne jedinice koda.

    Kao što je navedeno u drugim komentarima, znak 'a' zauzima jedan bajt, dok 'ա' zauzima dva bajta, što označava UTF-8 kodiranje. Dodatni bajt u izvornom pitanju nastao je zbog postojanja znaka za novi red na kraju.

    Slijedi odgovor od Ernie:

    1 bajt je 8 bita i može predstavljati do 256 (2 ^ 8) različitih vrijednosti.

    Za jezike koji zahtijevaju više mogućnosti od toga, jednostavno preslikavanje od 1 do 1 ne može se održavati, tako da je potrebno više podataka za pohranu znaka.

    Napominjemo da većina kodiranja koristi prvih 7 bitova (128 vrijednosti) za ASCII znakove. To ostavlja 8. bit, ili 128 više vrijednosti za više znakova. Dodajte akcentirane znakove, azijske jezike, ćirilicu itd. I lako ćete vidjeti zašto 1 bajt nije dovoljan za držanje svih znakova.


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.