Pagrindinis » kaip » Kodėl anglų kalbos simboliai turi mažesnį balų skaičių, kad juos atstovautų, nei kitų raidžių simboliai?

    Kodėl anglų kalbos simboliai turi mažesnį balų skaičių, kad juos atstovautų, nei kitų raidžių simboliai?

    Nors dauguma iš mūsų tikriausiai niekada nesustojo galvoti apie tai, abėcėlės ženklai nėra tokie patys dydžiai, kiek baitų, kurių reikia jiems atstovauti. Bet kodėl taip? Šiandienos „SuperUser“ atsakymų ir atsakymų atsakymas yra įdomus skaitytojo klausimas.

    Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.

    Dalinis ASCII diagramos ekranas, kuriame yra Wikipedia.

    Klausimas

    „SuperUser“ skaitytuvas khajvah nori sužinoti, kodėl skirtingos abėcėlės užima skirtingus kiekius vietos diske, kai išsaugoma:

    Kai į tekstinį failą įdėjau „a“ ir jį išsaugojau, jis sudaro 2 baitus. Bet kai įdėjau tokį simbolį kaip „letter“ (raidė iš armėnų abėcėlės), tai daro jį 3 baitų dydžio.

    Koks skirtumas tarp abėcėlės kompiuterio? Kodėl, išsaugojus, anglų kalba užima mažiau vietos?

    Laiškai yra raidės, tiesa? O gal ir ne! Koks yra atsakymas į šį abėcėlinį paslaptį?

    Atsakymas

    „SuperUser“ autoriai „Doktoro Reichard“ ir „Ernie“ atsako už mus. Pirma, Doktoro Reichard:

    Vienas iš pirmųjų kodavimo schemų, kurios turi būti sukurtos naudoti pagrindiniuose kompiuteriuose, yra ASCII (Amerikos standartinis informacijos mainų kodas) standartas. Jis buvo sukurtas 1960-aisiais JAV.

    Anglų abėcėlė naudoja dalį lotyniškos abėcėlės (pvz., Anglų kalba yra keletas diakritinių žodžių). Šioje abėcėlėje yra 26 atskiros raidės, neatsižvelgiant į atvejį. Be to, kiekvienoje schemoje, kuri apsimeta koduojančią anglišką abėcėlę, taip pat reikės atskirų numerių ir skyrybos ženklų..

    1960-aisiais taip pat buvo laikas, kai kompiuteriai neturėjo atminties ar vietos diske. ASCII buvo sukurtas kaip standartinis funkcinės abėcėlės atstovavimas visuose Amerikos kompiuteriuose. Tuo metu sprendimas dėl kiekvieno ASCII simbolio 8 bitų (1 baito) ilgio buvo atliktas dėl laiko techninių detalių (Wikipedia straipsnyje minimas faktas, kad perforuota juosta laikė 8 bitus vienoje padėtyje). Iš tiesų, pradinė ASCII schema gali būti perduodama naudojant 7 bitus, o aštuntasis gali būti naudojamas paritetiniams patikrinimams. Vėlesni pokyčiai išplėtė pradinę ASCII schemą, įtraukdami keletą akcentuotų, matematinių ir terminalų simbolių.

    Pastaruoju metu didėjant kompiuterių naudojimui visame pasaulyje, vis daugiau žmonių iš skirtingų kalbų turėjo prieigą prie kompiuterio. Tai reiškė, kad kiekvienai kalbai reikia kurti naujas kodavimo schemas, nepriklausomai nuo kitų schemų, kurios prieštarautų, jei būtų skaitomos iš skirtingų kalbų terminalų.

    Unicode atsirado kaip sprendimas dėl skirtingų terminalų egzistavimo, sujungiant visus galimus reikšmingus simbolius į vieną abstraktų simbolių rinkinį.

    UTF-8 yra vienas iš būdų koduoti Unicode simbolių rinkinį. Tai kintamas pločio kodavimas (t. Y. Skirtingi simboliai gali būti skirtingo dydžio) ir buvo suprojektuoti atgaliniam suderinamumui su ankstesne ASCII schema. Taigi ASCII simbolių rinkinys išliks vienu baitu, o kiti simboliai yra du ar daugiau baitų dydžio. UTF-16 yra dar vienas būdas koduoti Unicode simbolių rinkinį. Lyginant su UTF-8, simboliai yra koduojami kaip vieno arba dviejų 16 bitų kodų rinkinių rinkinys.

    Kaip nurodyta kituose komentaruose, „a“ simbolis užima vieną baitą, o „ա“ užima du baitus, o tai reiškia UTF-8 kodavimą. Papildomas baitas pirminiame klausime buvo dėl to, kad pabaigoje buvo nauja eilutė.

    Po to atsakė Ernie:

    1 baitas yra 8 bitai, todėl gali būti iki 256 (2 ^ 8) skirtingų verčių.

    Kalboms, kurioms reikalingos daugiau galimybių, paprastas 1–1 žemėlapis negali būti išsaugotas, todėl reikia daugiau duomenų saugoti simbolį.

    Atkreipkite dėmesį, kad dažniausiai dauguma kodų naudoja ASCII simbolių pirmuosius 7 bitus (128 reikšmes). Tai palieka 8 bitą arba 128 daugiau vertybių daugiau simbolių. Pridėkite diakritinių ženklų, Azijos kalbų, kirilicų ir kt., Ir jūs galite lengvai pamatyti, kodėl 1 baitas yra nepakankamas visų simbolių laikymui.


    Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.