Startpagina » hoe » Waarom hebben Engelse personages minder bytes nodig om hen te vertegenwoordigen dan tekens in andere alfabetten?

    Waarom hebben Engelse personages minder bytes nodig om hen te vertegenwoordigen dan tekens in andere alfabetten?

    Hoewel de meesten van ons waarschijnlijk nooit zijn blijven nadenken, zijn alfabetische tekens niet allemaal even groot in het aantal bytes dat nodig is om ze weer te geven. Maar waarom is dat? De SuperUser Q & A-post van vandaag biedt de antwoorden op de vraag van een nieuwsgierige lezer.

    De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.

    Gedeeltelijke ASCII-kaart screenshot met dank aan Wikipedia.

    De vraag

    SuperUser-lezer khajvah wil weten waarom verschillende alfabetten verschillende hoeveelheden schijfruimte innemen wanneer ze worden opgeslagen:

    Wanneer ik 'a' in een tekstbestand plaats en het opslaat, is het 2 bytes groot. Maar als ik een personage als 'ա' (een letter van het Armeense alfabet) in plaats maak, wordt het 3 bytes groot.

    Wat is het verschil tussen alfabetten op een computer? Waarom neemt Engels minder ruimte in beslag als het wordt opgeslagen?

    Letters zijn letters, toch? Misschien niet! Wat is het antwoord op dit alfabetische mysterie?

    Het antwoord

    SuperUser-bijdragers Doktoro Reichard en ernie hebben het antwoord voor ons. Ten eerste, Doktoro Reichard:

    Een van de eerste coderingsschema's die worden ontwikkeld voor gebruik op reguliere computers is de ASCII (Amerikaanse standaardcode voor informatie-uitwisseling) standaard. Het werd ontwikkeld in de jaren 1960 in de Verenigde Staten.

    Het Engelse alfabet gebruikt een deel van het Latijnse alfabet (er zijn bijvoorbeeld weinig woorden met een accent in het Engels). Er zijn 26 individuele letters in dat alfabet, zonder rekening te houden met het geval. En er zouden ook de individuele cijfers en leestekens moeten bestaan ​​in elk schema dat pretendeert het Engelse alfabet te coderen.

    De jaren 1960 was ook een tijd waarin computers niet de hoeveelheid geheugen of schijfruimte hadden die we nu hebben. ASCII is ontwikkeld als een standaardrepresentatie van een functioneel alfabet op alle Amerikaanse computers. Op dat moment was de beslissing om elk ASCII-teken 8 bits (1 byte) lang te maken, gemaakt vanwege technische details van de tijd (het Wikipedia-artikel vermeldt het feit dat geperforeerde tape acht bits per keer in een positie hield). In feite kan het oorspronkelijke ASCII-schema worden verzonden met behulp van 7 bits, en de achtste kan worden gebruikt voor pariteitscontroles. Latere ontwikkelingen hebben het oorspronkelijke ASCII-schema uitgebreid met verschillende geaccentueerde, wiskundige en terminale karakters.

    Met de recente toename van computergebruik over de hele wereld hadden steeds meer mensen uit verschillende talen toegang tot een computer. Dat betekende dat voor elke taal nieuwe coderingsschema's moesten worden ontwikkeld, onafhankelijk van andere schema's, die zouden conflicteren als ze werden gelezen van verschillende taalterminals..

    Unicode ontstond als een oplossing voor het bestaan ​​van verschillende terminals door alle mogelijke betekenisvolle personages samen te voegen tot één abstracte tekenset.

    UTF-8 is een manier om de Unicode-tekenset te coderen. Het is een codering met variabele breedte (d.w.z. verschillende karakters kunnen verschillende grootten hebben) en het was ontworpen voor achterwaartse compatibiliteit met het vroegere ASCII-schema. Als zodanig blijft de ASCII-tekenset één byte groot terwijl andere tekens twee of meer bytes groot zijn. UTF-16 is een andere manier om de Unicode-tekenset te coderen. In vergelijking met UTF-8 zijn tekens gecodeerd als een set van een of twee 16-bits code-eenheden.

    Zoals vermeld in andere opmerkingen, neemt het teken 'a' een enkele byte in, terwijl 'ա' twee bytes in beslag neemt, wat staat voor een UTF-8-codering. De extra byte in de oorspronkelijke vraag was het gevolg van het bestaan ​​van een nieuwlijnteken aan het einde.

    Gevolgd door het antwoord van Ernie:

    1 byte is 8 bits en kan dus maximaal 256 (2 ^ 8) verschillende waarden vertegenwoordigen.

    Voor talen die meer mogelijkheden vereisen, kan een eenvoudige 1-op-1-toewijzing niet worden bijgehouden, zodat er meer gegevens nodig zijn om een ​​teken op te slaan.

    Over het algemeen gebruiken de meeste coderingen de eerste 7 bits (128 waarden) voor ASCII-tekens. Dat laat het 8e bit, of 128 meer waarden voor meer tekens. Voeg letters met accenten, Aziatische talen, Cyrillisch etc. toe en je kunt gemakkelijk zien waarom 1 byte niet voldoende is om alle tekens vast te houden.


    Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.