If-Koubou

De ce caracterele engleze au nevoie de mai puține octeți pentru a le reprezenta decât caracterele în alte alfabete?

De ce caracterele engleze au nevoie de mai puține octeți pentru a le reprezenta decât caracterele în alte alfabete? (Cum să)

În timp ce majoritatea dintre noi probabil nu ne-am oprit niciodată să ne gândim, caracterele alfabetice nu au aceeași dimensiune în numărul de octeți care le este necesar pentru a le reprezenta. Dar de ce este asta? Postul de astăzi SuperUser Q & A are răspunsurile la o întrebare curioasă a cititorului.

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Parțial ASCII Chart grafice de imagine de la Wikipedia.

Intrebarea

Cititorul de SuperUser khajvah vrea să știe de ce diferite alfabete ocupă diferite sume de spațiu pe disc când sunt salvate:

Când pun "a" într-un fișier text și îl salvez, îl face 2 octeți în dimensiune. Dar când am pus un personaj ca "Ђ" (o literă din alfabetul armean), el o face de 3 octeți în dimensiune.

Care este diferența dintre alfabetele pe un computer? De ce engleza ocupă mai puțin spațiu atunci când este salvată?

Scrisorile sunt litere, nu? Poate nu! Care este răspunsul la acest mister alfabetic?

Răspunsul

Utilizatorii SuperUseri Doktoro Reichard și ernie au răspunsul pentru noi. În primul rând, Doktoro Reichard:

Una dintre primele scheme de codificare care urmează să fie dezvoltate pentru a fi utilizate în computerele obișnuite este ASCII (Codul American Standard pentru Schimbul de Informații) standard. Ea a fost dezvoltată în anii 1960 în Statele Unite.

Alfabetul englez utilizează o parte din alfabetul latin (de exemplu, există câteva cuvinte accentuate în limba engleză). Există 26 de litere individuale în acel alfabet, fără a lua în considerare cazul. Și ar trebui să existe numerele individuale și semnele de punctuație în orice schemă care pretinde că codifică alfabetul englez.

Anii 1960 au fost, de asemenea, o perioadă în care computerele nu aveau cantitatea de memorie sau spațiu pe disc pe care le avem acum. ASCII a fost dezvoltat ca o reprezentare standard a unui alfabet funcțional în toate calculatoarele americane. La acea vreme, decizia de a face fiecare caracter ASCII 8 biți (1 octet) lungă a fost făcută din cauza detaliilor tehnice ale timpului (articolul Wikipedia menționează faptul că banda perforată a avut 8 biți într-o poziție la un moment dat). De fapt, schema inițială ASCII poate fi transmisă folosind 7 biți, iar cea de-a opta ar putea fi folosită pentru verificarea parității. Ulterior, evoluțiile au extins schema originală ASCII pentru a include mai multe caractere accentuate, matematice și terminale.

Odată cu creșterea recentă a utilizării computerului în întreaga lume, tot mai mulți oameni din diferite limbi au avut acces la un computer. Asta însemna că, pentru fiecare limbă, s-ar fi trebuit să se dezvolte noi scheme de codificare, independent de alte scheme, care ar fi conflictuale dacă ar fi citite de la terminalele lingvistice diferite.

Unicode a apărut ca o soluție la existența unor terminale diferite, prin îmbinarea tuturor personajelor semnificative posibile într-un singur set de caractere abstracte.

UTF-8 este o modalitate de a codifica setul de caractere Unicode. Este o codificare cu lățime variabilă (adică diferite caractere poate avea diferite dimensiuni) și a fost proiectată pentru compatibilitate cu fosta schemă ASCII. Ca atare, setul de caractere ASCII va rămâne un octet în mărime, în timp ce alte caractere sunt de două sau mai multe octeți în dimensiune. UTF-16 este un alt mod de a codifica setul de caractere Unicode. În comparație cu UTF-8, caracterele sunt codificate fie ca un set de una sau două unități de cod pe 16 biți.

După cum se menționează în alte comentarii, caracterul "a" ocupă un singur octet în timp ce "'" ocupă două octeți, ceea ce denotă o codificare UTF-8. Extra octetul din întrebarea inițială sa datorat existenței unui caracter nou la sfârșit.

Urmat de răspunsul de la ernie:

1 octet este de 8 biți și poate reprezenta astfel până la 256 (2 ^ 8) valori diferite.

Pentru limbile care necesită mai multe posibilități decât acest lucru, nu poate fi menținută o simplă mapare de la 1 la 1, deci sunt necesare mai multe date pentru a stoca un caracter.

Rețineți că, în general, majoritatea codificărilor utilizează primele 7 biți (128 valori) pentru caracterele ASCII. Asta lasă cel de-al 8-lea bit, sau 128 mai multe valori pentru mai multe caractere. Adăugați caractere accentuate, limbi asiatice, chirilice etc. și puteți vedea cu ușurință de ce 1 octet nu este suficient pentru a ține toate caracterele.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.