Miks inglise keele tähemärki vajab vähem kui teisi tähestikke?
Kuigi enamik meist ei ole ilmselt kunagi selle peale mõtlema peatunud, ei ole tähestikulised tähemärgid nende esindamiseks vajalike baitide arvu poolest ühesugused. Aga miks see nii on? Tänase SuperUser Q&A postitusel on vastused uudishimulikule lugeja küsimusele.
Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.
Osaline ASCII diagrammi pilt viisakalt Wikipediast.
Küsimus
SuperUser lugeja khajvah tahab teada, miks erinevad tähestikud salvestamisel salvestavad erinevaid kettaruumi:
Kui panen tekstifaili "a" ja salvestan selle, muudab see 2 baiti suuruseks. Aga kui panen märgi nagu ա (armeeniakeelsest tähest), muudab see 3 baiti suuruseks.
Mis vahe on tähestike vahel arvutis? Miks võtab inglise keel salvestamisel vähem ruumi?
Kirjad on tähed, eks? Võibolla mitte! Mis on vastus sellele tähestikulisele saladusele?
Vastus
SuperUser'i toetajad Doktoro Reichard ja ernie on meile vastuseks. Esiteks, Doktoro Reichard:
Üks esimesi kodeerimisskeeme, mida arendatakse peavoolu arvutites kasutamiseks, on ASCII (Ameerika teabevahetuse standardkood) standard. See töötati välja 1960ndatel Ameerika Ühendriikides.
Inglise tähestikus kasutatakse ladina tähestikku (näiteks inglise keeles on vähe rõhutatud sõnu). Selles tähestikus on 26 individuaalset tähte, mitte juhtumit arvesse võttes. Ja seal peaks olema olemas ka individuaalsed numbrid ja kirjavahemärgid kõigis skeemides, mis väidavad, et kodeerivad inglise tähestikku.
1960ndatel oli ka aeg, mil arvutitel ei olnud praegu mälu ega kettaruumi. ASCII on välja töötatud funktsionaalse tähestiku standardseks esitluseks kõigis Ameerika arvutites. Sel ajal tehti otsus iga ASCII märgi 8 bitti (1 bait) pikkune tegemine aja tehniliste üksikasjade tõttu (Wikipedia artikkel mainib asjaolu, et perforeeritud lindil oli 8 bitti korraga). Tegelikult saab algset ASCII skeemi edastada 7 bitti kasutades ja kaheksandat võiks kasutada pariteedi kontrollimiseks. Hilisemad arengud laiendasid algset ASCII skeemi, et hõlmata mitu täpseid, matemaatilisi ja terminali märke.
Arvutikasutuse hiljutise suurenemise tõttu kogu maailmas said üha enam inimesi erinevatest keeltest juurdepääsu arvutile. See tähendas, et iga keele jaoks tuli välja töötada uued kodeerimisskeemid teistest skeemidest sõltumatult, mis oleksid vastuolulised, kui nad loeksid erinevatest keele terminalidest.
Unicode tekkis lahendusena erinevate terminalide olemasolule, ühendades kõik võimalikud tähenduslikud tähemärgid üheks abstraktseks märgistikuks.
UTF-8 on üks viis Unicode'i märkide komplekti kodeerimiseks. See on muutuva laiusega kodeering (s.t erinevad tähemärgid võivad olla erineva suurusega) ja see oli ette nähtud endise ASCII skeemiga kokkusobivaks. Sellisena jääb ASCII tähemärkide suurus üheks baitiks, samas kui teised tähemärgid on kahe või enama baiti suurused. UTF-16 on veel üks viis Unicode'i märkide komplekti kodeerimiseks. Võrreldes UTF-8-ga, kodeeritakse märke kas ühe või kahe 16-bitise koodi ühikuna.
Nagu teistes kommentaarides on öeldud, on a-tähemärgil üks bait, samas kui „ա” on kaks baiti, tähistades UTF-8 kodeeringut. Esialgse küsimuse täiendav bait oli tingitud sellest, et lõpus oli olemas uus joon.
Järgneb vastus ernie:
1 bait on 8 bitti ja võib seega moodustada kuni 256 (2 ^ 8) erinevat väärtust.
Keeltes, mis nõuavad rohkem võimalusi, ei saa lihtsat 1 kuni 1 kaardistamist säilitada, seega on märgi salvestamiseks vaja rohkem andmeid.
Pange tähele, et enamik kodeeringuid kasutab ASCII tähemärki esimest 7 bitti (128 väärtust). See jätab kaheksanda bitti või veel 128 väärtust rohkemate märkide jaoks. Lisage rõhumärkidega tähemärki, Aasia keeli, kirillitšekki jne ja saate hõlpsasti näha, miks 1 baidist ei piisa kõigi tähemärkide hoidmiseks.
Kas teil on midagi lisada selgitusele? Heli on kommentaarides välja lülitatud. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.