Hemsida » hur » Varför behöver engelska tecken färre byte för att representera dem än tecken i andra alfabet?

    Varför behöver engelska tecken färre byte för att representera dem än tecken i andra alfabet?

    Medan de flesta av oss antagligen aldrig slutat tänka på det, är alfabetiska tecken inte lika stora i antalet byte som krävs för att representera dem. Men varför är det? Dagens SuperUser Q & A-inlägg har svaren på en nyfiken läsarens fråga.

    Dagens Question & Answer-session kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

    Delvis ASCII-diagram skärmdump med tillstånd av Wikipedia.

    Frågan

    SuperUser-läsare khajvah vill veta varför olika alfabet tar upp olika mängder diskutrymme när de sparas:

    När jag sätter 'a' i en textfil och sparar den, blir den 2 byte i storlek. Men när jag sätter ett tecken som 'ա' (ett brev från det armeniska alfabetet), gör det det 3 bitar i storlek.

    Vad är skillnaden mellan alfabet på en dator? Varför tar engelska mindre utrymme när den sparas?

    Brev är bokstäver, eller hur? Kanske inte! Vad är svaret på detta alfabetiska mysterium?

    Svaret

    SuperUser-bidragsgivare Doktoro Reichard och ernie har svaret för oss. Först upp, Doktoro Reichard:

    Ett av de första kodningssystemen som ska utvecklas för användning i vanliga datorer är ASCII (American Standard Code för informationsutbyte) standard. Det utvecklades på 1960-talet i USA.

    Det engelska alfabetet använder en del av det latinska alfabetet (till exempel finns det få accenterade ord på engelska). Det finns 26 enskilda bokstäver i det alfabetet, inte övervägande fall. Och det skulle också behöva existera de enskilda talen och skiljetecken i något system som låtsas att koda det engelska alfabetet.

    1960-talet var också en tid då datorer inte hade mängden minne eller diskutrymme som vi har nu. ASCII utvecklades för att vara en standardrepresentation av ett funktionellt alfabet över alla amerikanska datorer. Vid den tiden var beslutet att göra varje ASCII-tecken 8 bitar (1 byte) länge gjord på grund av tekniska detaljer om tiden (Wikipedia-artikeln nämner det faktum att perforerat band höll 8 bitar i en position i taget). Det ursprungliga ASCII-systemet kan faktiskt sändas med 7 bitar och den åttonde kan användas för paritetskontroller. Senare utvecklingar utvidgade det ursprungliga ASCII-systemet till att omfatta flera accenterade, matematiska och terminala tecken.

    Med den senaste ökningen av datoranvändning över hela världen hade fler och fler personer från olika språk tillgång till en dator. Det innebar att för varje språk nya kodningssystem skulle utvecklas, oberoende av andra system, vilket skulle kunna störa om det skulle läsas från olika språkterminaler.

    Unicode kom fram som en lösning på förekomsten av olika terminaler genom att slå samman alla möjliga meningsfulla tecken i en enda abstrakt teckenuppsättning.

    UTF-8 är ett sätt att koda Unicode teckenuppsättningen. Det är en kodning med variabel bredd (det vill säga olika tecken kan ha olika storlekar) och det var konstruerat för bakåtkompatibilitet med det tidigare ASCII-systemet. Som sådan kommer ASCII-teckenuppsättningen att förbli en byte i storlek medan andra tecken har två eller flera bitar i storlek. UTF-16 är ett annat sätt att koda Unicode teckenuppsättningen. I jämförelse med UTF-8 kodas tecken som antingen en uppsättning av en eller två 16-bitars kodenheter.

    Som sagt i andra kommentarer upptar "a" -tecknet en enda byte medan "ա" upptar två byte, som betecknar en UTF-8-kodning. Den extra byten i den ursprungliga frågan berodde på att det fanns en nylinje på slutet.

    Följd av svaret från ernie:

    1 byte är 8 bitar och kan således representera upp till 256 (2 ^ 8) olika värden.

    För språk som kräver fler möjligheter än detta, kan en enkel 1 till 1 kartläggning inte bibehållas, så det behövs mer data för att lagra en karaktär.

    Observera att de flesta kodningar i allmänhet använder de första 7 bitarna (128 värden) för ASCII-tecken. Det lämnar 8: e biten, eller 128 ytterligare värden för fler tecken. Lägg till i accenterade tecken, asiatiska språk, kyrilliska etc. och du kan lätt se varför 1 byte inte räcker för att hålla alla tecken.


    Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.