Hjemmeside » hvordan » Hvorfor trenger engelske tegn færre byte til å representere dem enn tegn i andre alfabeter?

    Hvorfor trenger engelske tegn færre byte til å representere dem enn tegn i andre alfabeter?

    Mens de fleste av oss sannsynligvis aldri har sluttet å tenke på det, er alfabetiske tegn ikke like stor i antall byte som det tar å representere dem. Men hvorfor er det? Dagens SuperUser Q & A-post har svar på en nysgjerrig leser spørsmål.

    Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.

    Delvis ASCII-skjermbilde av artikkelen fra Wikipedia.

    Spørsmålet

    SuperUser leser khajvah vil vite hvorfor forskjellige alfabeter tar opp ulike mengder diskplass når de er lagret:

    Når jeg legger 'a' i en tekstfil og lagrer den, blir den 2 byte i størrelse. Men når jeg legger et tegn som 'ա' (et brev fra det armenske alfabetet), gjør det det 3 byte i størrelse.

    Hva er forskjellen mellom alfabeter på en datamaskin? Hvorfor tar engelsk mindre plass når den er lagret?

    Bokstaver er bokstaver, ikke sant? Kanskje ikke! Hva er svaret på dette alfabetiske mysteriet?

    Svaret

    SuperUser bidragsytere Doktoro Reichard og ernie har svaret for oss. Først opp, Doktoro Reichard:

    En av de første kodingssystemene som skal utvikles for bruk i vanlige datamaskiner, er ASCII (American Standard Code for Information Interchange) standard. Den ble utviklet på 1960-tallet i USA.

    Det engelske alfabetet bruker en del av det latinske alfabetet (for eksempel er det få aksentord på engelsk). Det er 26 individuelle bokstaver i det alfabetet, ikke vurderer saken. Og det vil også måtte eksistere de enkelte tallene og tegnsettingene i en hvilken som helst ordning som later til å kode det engelske alfabetet.

    1960-tallet var også en tid da datamaskiner ikke hadde mengden minne eller diskplass som vi har nå. ASCII ble utviklet for å være en standard representasjon av et funksjonelt alfabet over alle amerikanske datamaskiner. På den tiden ble beslutningen om å gjøre hver ASCII-karakter 8 bits (1 byte) lang laget på grunn av tekniske detaljer om tiden (Wikipedia-artikkelen nevner at perforert bånd holdt 8 biter i en stilling om gangen). Faktisk kan den opprinnelige ASCII-ordningen overføres ved hjelp av 7 biter, og den åttende kan brukes til paritetskontroller. Senere utviklinger utvidet den opprinnelige ASCII-ordningen for å inkludere flere aksenterte, matematiske og terminale tegn.

    Med den siste økningen av datautbruken over hele verden, hadde flere og flere personer fra forskjellige språk tilgang til en datamaskin. Det innebar at for hvert språk måtte nye kodingsordninger utvikles, uavhengig av andre ordninger, som ville komme i konflikt hvis de ble lest fra forskjellige språkterminaler.

    Unicode oppsto som en løsning på eksistensen av forskjellige terminaler ved å slå sammen alle mulige meningsfulle tegn i et enkelt abstrakt tegnsett.

    UTF-8 er en måte å kode inn Unicode tegnsett. Det er en koding med variabel bredde (det vil si forskjellige tegn kan ha forskjellige størrelser) og det ble designet for bakoverkompatibilitet med det tidligere ASCII-systemet. Som sådan vil ASCII-tegnsettet forbli en byte i størrelse, mens andre tegn har to eller flere byte i størrelse. UTF-16 er en annen måte å kode på Unicode tegnsettet. I forhold til UTF-8 er tegn kodet som enten et sett med en eller to 16-biters kodeenheter.

    Som nevnt i andre kommentarer, har 'a'-tegnet en enkelt byte mens' ա 'opptar to byte, som betegner en UTF-8-koding. Den ekstra byten i det opprinnelige spørsmålet var på grunn av eksistensen av en nylinje på slutten.

    Etterfulgt av svaret fra ernie:

    1 byte er 8 biter, og kan dermed representere opptil 256 (2 ^ 8) forskjellige verdier.

    For språk som krever flere muligheter enn dette, kan en enkel 1 til 1 kartlegging ikke opprettholdes, så det er nødvendig med flere data for å lagre et tegn.

    Merk at de fleste kodinger vanligvis bruker de første 7 bitene (128 verdier) for ASCII-tegn. Det etterlater 8 eller 128 flere verdier for flere tegn. Legg til i aksenttegn, asiatiske språk, kyrillisk, etc., og du kan enkelt se hvorfor 1 byte ikke er tilstrekkelig til å holde alle tegnene.


    Har du noe å legge til forklaringen? Lyder av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.