Hjemmeside » hvordan » Hvorfor har engelske tegn færre byte til at repræsentere dem end tegn i andre alfabeter?

    Hvorfor har engelske tegn færre byte til at repræsentere dem end tegn i andre alfabeter?

    Mens de fleste af os sandsynligvis aldrig har holdt op med at tænke over det, er alfabetiske tegn ikke lige stor i antallet af byte, der kræves for at repræsentere dem. Men hvorfor er det? Dagens SuperUser Q & A indlæg har svar på en nysgerrig læsers spørgsmål.

    Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

    Delvis ASCII Diagram skærmbillede høflighed af Wikipedia.

    Spørgsmålet

    SuperUser læser khajvah ønsker at vide, hvorfor forskellige alfabeter optager forskellige mængder diskplads, når de gemmes:

    Når jeg sætter 'a' i en tekstfil og gemmer den, gør den det til 2 byte i størrelse. Men når jeg sætter et tegn som 'ա' (et bogstav fra det armenske alfabet) i, gør det det til 3 byte i størrelse.

    Hvad er forskellen mellem alfabeter på en computer? Hvorfor tager engelsk mindre plads, når det er gemt?

    Bogstaver er breve, ikke? Måske ikke! Hvad er svaret på dette alfabetiske mysterium?

    Svaret

    SuperUser bidragsydere Doktoro Reichard og ernie har svaret for os. Først op, Doktoro Reichard:

    En af de første kodningssystemer, der skal udvikles til brug i almindelige computere, er ASCII'en (American Standard Code for informationsudveksling) standard. Det blev udviklet i 1960'erne i USA.

    Det engelske alfabet bruger en del af det latinske alfabet (for eksempel er der få accentede ord på engelsk). Der er 26 individuelle bogstaver i det alfabet, ikke i betragtning af sagen. Og der skal også eksistere de individuelle tal og tegnsæt i en hvilken som helst ordning, der foregiver at kode det engelske alfabet.

    1960'erne var også en tid, hvor computere ikke havde mængden af ​​hukommelse eller diskplads, som vi nu har. ASCII blev udviklet til at være en standardrepræsentation af et funktionelt alfabet på tværs af alle amerikanske computere. På den tid blev beslutningen om at gøre hver ASCII-karakter 8 bit (1 byte) lang lavet på grund af tekniske detaljer af tiden (Wikipedia-artiklen nævner det faktum, at perforeret bånd holdt 8 bits i en stilling ad gangen). Faktisk kan den oprindelige ASCII-ordning overføres ved hjælp af 7 bits, og den ottende kan bruges til paritetskontrol. Senere udviklinger udvidede den oprindelige ASCII-ordning til at omfatte flere accentede, matematiske og terminale tegn.

    Med den seneste stigning i computerforbruget over hele verden havde flere og flere personer fra forskellige sprog adgang til en computer. Det betød, at der for hvert sprog skulle udvikles nye kodningsordninger uafhængigt af andre ordninger, som ville være i konflikt, hvis de læses fra forskellige sprogterminaler.

    Unicode blev en løsning på eksistensen af ​​forskellige terminaler ved at slå alle mulige meningsfulde tegn sammen i et enkelt abstrakt tegnsæt.

    UTF-8 er en måde at kode på Unicode tegnsæt. Det er en kodning med variabel bredde (dvs. forskellige tegn kan have forskellige størrelser), og den blev designet til bagudkompatibilitet med det tidligere ASCII-skema. Som sådan vil ASCII-tegnsættet forblive en byte i størrelse, mens andre tegn har to eller flere bytes i størrelse. UTF-16 er en anden måde at kode Unicode tegnsæt på. I sammenligning med UTF-8 er tegn kodet som enten et sæt af en eller to 16-bit kodeenheder.

    Som nævnt i andre kommentarer indtager 'a'-tegnet en enkelt byte, mens' ա 'optager to byte, der angiver en UTF-8-kodning. Den ekstra byte i det oprindelige spørgsmål skyldtes eksistensen af ​​en newline karakter i slutningen.

    Efterfulgt af svaret fra ernie:

    1 byte er 8 bit og kan således repræsentere op til 256 (2 ^ 8) forskellige værdier.

    For sprog, der kræver flere muligheder end dette, kan en simpel 1 til 1 kortlægning ikke opretholdes, så flere data er nødvendige for at gemme en karakter.

    Bemærk, at de fleste kodninger normalt bruger de første 7 bits (128 værdier) for ASCII-tegn. Det efterlader den 8. bit eller 128 flere værdier for flere tegn. Tilføj i accentede tegn, asiatiske sprog, kyrilliske osv., Og du kan nemt se, hvorfor 1 byte ikke er tilstrækkelig til at holde alle tegn.


    Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.