Iako većina nas vjerojatno nikada nije prestala razmišljati o tome, abecedni znakovi nisu iste veličine u broju bajtova za njihovo predstavljanje. Ali zašto je to? Danas SuperUser Q & A post ima odgovore na pitanje čudnog čitatelja.
Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.
Djelomična ASCII slika screenshot ljubaznošću Wikipedije.
Knjiga SuperUser čitača želi znati zašto se različiti algaberi zauzimaju na različitim količinama prostora na disku kada ih spremaju:
Kada stavim 'a' u tekstualnu datoteku i spremam ga, čini ga 2 bajta u veličini. Ali kad stavim znak poput 'ա' (pismo iz armenske abecede), to ga čini 3 bajta u veličini.
Koja je razlika između alfabeta na računalu? Zašto se engleski traži manje prostora kada se spremaju?
Slova su slova, zar ne? Možda ne! Koji je odgovor na ovo abecedno otajstvo?
Davatelji SuperUser-a Doktoro Reichard i ernie imaju odgovor za nas. Prvo, Doktoro Reichard:
Jedna od prvih shema kodiranja koje treba razviti za uporabu u mainstream računalima je ASCII (Američki standardni kod za razmjenu informacija) standard. Razvijen je 1960-ih u Sjedinjenim Državama.
Engleska abeceda upotrebljava dio latinske abecede (na primjer, postoji nekoliko naglašenih riječi na engleskom jeziku). U toj abecedi ima 26 pojedinačnih slova, ne uzimajući u obzir slučaj. Tamo bi također trebali postojati pojedinačni brojevi i interpunkcijski znakovi u bilo kojoj shemi koja se pretvara da kodificira englesku abecedu.
1960-ih je također bio vrijeme kada računala nemaju količinu memorije ili prostora na disku koji imamo sada. ASCII je razvijen kao standardni prikaz funkcionalne abecede u svim američkim računalima. U to vrijeme, odluka da svaki ASCII znak bude dugačak 8 bita (1 bajt) napravljen je zbog tehničkih detalja vremena (članak iz Wikipedije spominje činjenicu da perforirana traka održava 8 bita u položaju u isto vrijeme). Zapravo, izvorni ASCII shema može se prenijeti pomoću 7 bita, a osmi se može koristiti za provjere pariteta. Kasniji razvoj proširio je originalnu ASCII shemu s nekoliko naglašenih, matematičkih i terminalnih znakova.
S nedavnim povećanjem korištenja računala širom svijeta, sve više ljudi iz različitih jezika imalo je pristup računalu. To je značilo da su za svaki jezik morali razvijati nove sheme kodiranja, neovisno o drugim shemama, što bi se sukobilo ako se pročita s različitih jezičnih terminala.
Unicode je nastao kao rješenje postojanja različitih terminala spajanjem svih mogućih značajnih znakova u jedan sažetak skup znakova.
UTF-8 je jedan od načina za kodiranje Unicode skup znakova. To je šifriranje promjenjive širine (tj. Različiti znakovi mogu imati različite veličine) i dizajniran je za unatrag kompatibilnost sa bivšom shemom ASCII. Kao takav, ASCII skup znakova će ostati veličine jednog bajta, dok su drugi znakovi veličine dva ili više bajta. UTF-16 je još jedan način za kodiranje Unicode skup znakova. U usporedbi s UTF-8, znakovi se kodiraju kao skup jedne ili dvije 16-bitne jedinice koda.
Kao što je navedeno u drugim komentarima, znak 'a' zauzima jednu bajt, dok '' zauzima dva bajtova, što označava kodiranje UTF-8. Dodatni bajt u izvornom pitanju bio je zbog postojanja novog znaka na kraju.
Slijedi odgovor ernie:
1 bajt je 8 bita, i tako može predstaviti do 256 (2 ^ 8) različitih vrijednosti.
Za jezike koji zahtijevaju više mogućnosti od toga ne može se održavati jednostavno mapiranje od 1 do 1 pa je potrebno više podataka za pohranjivanje znaka.
Imajte na umu da općenito, većina kodova koristi prve 7 bita (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 možete vidjeti zašto 1 bajt nije dovoljan za držanje svih znakova.
Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.