Pagina principala » HOWTO » De ce caracterele engleze au nevoie de mai putine octeți pentru a le reprezenta decât caracterele în alte alfabete?

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

    Î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 web 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 cantități 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 3 octeți în dimensiune.

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

    Scrisorile sunt scrisori, 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 codare care urmează să fie dezvoltate pentru a fi utilizate în calculatoarele obișnuite este ASCII (Codul American Standard pentru Schimbul de Informații) standard. Acesta 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 se preface că codifică alfabetul englez.

    Anii 1960 au fost, de asemenea, un moment î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 byte) 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 calculatorului în întreaga lume, tot mai mulți oameni din diferite limbi au avut acces la un computer. Asta însemna că, pentru fiecare limbă, trebuie să se dezvolte noi scheme de codificare, independent de alte scheme, care ar intra în conflict dacă sunt 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 dimensiuni diferite) și a fost proiectată pentru compatibilitatea 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ă doi 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. Ajunge la 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 comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.