Domovská » jak » Proč anglické znaky potřebují méně bajtů, aby je reprezentovali než znaky v jiných abecedách?

    Proč anglické znaky potřebují méně bajtů, aby je reprezentovali než znaky v jiných abecedách?

    Zatímco většina z nás se pravděpodobně nikdy nepřestala přemýšlet o tom, abecední znaky nemají stejnou velikost v počtu bajtů, které jsou potřebné k jejich reprezentaci. Ale proč je to tak? Dnešní příspěvek SuperUser Q & A má odpovědi na otázku zvědavé čtenáře.

    Dnešní zasedání Otázky a odpovědi nás přichází s laskavým svolením SuperUser - podřízené rozdělení Stack Exchange, které je založeno na komunitě prostřednictvím skupin webových stránek.

    Částečný graf ASCII grafu s laskavým svolením Wikipedie.

    Otázka

    Čtenář SuperUser khajvah chce vědět, proč různé abecedy při uložení zachytí různá množství místa na disku:

    Když dám 'a' do textového souboru a uložím to, udělá to 2 bajty ve velikosti. Ale když jsem dal znak jako 'Ђ' (dopis z arménské abecedy) v, to dělá to 3 bajty ve velikosti.

    Jaký je rozdíl mezi abecedy v počítači? Proč angličtina zaujme méně místa při uložení?

    Dopisy jsou dopisy, ne? Možná ne! Jaká je odpověď na toto abecední tajemství?

    Odpověď

    Příznivci SuperUser Doktor Reichard a ernie mají pro nás odpověď. První, doktor Reichard:

    Jeden z prvních kódovacích schémat, které mají být vyvinuty pro použití v běžných počítačích, je ASCII (Americký standardní kód pro výměnu informací) Standard. Byl vyvinut v šedesátých letech ve Spojených státech.

    Anglická abeceda používá část latinské abecedy (například je zde několik slov s diakritikou v angličtině). V této abecedě je 26 samostatných písmen, bez ohledu na případ. A tam by také musely existovat jednotlivé čísla a interpunkční znaménka v jakémkoli schématu, který předstírá kódování anglické abecedy.

    Šedesátá léta byla také dobou, kdy počítače neměly dostatek paměti nebo místa na disku, které máme nyní. ASCII byl vyvinut jako standardní reprezentace funkční abecedy ve všech amerických počítačích. V té době bylo rozhodnutí udělit každý znak ASCII 8 bajtů dlouhý, a to díky technickým detailům času (článek Wikipedia uvádí skutečnost, že perforovaná páska má 8 bitů v pozici najednou). Ve skutečnosti může být původní schéma ASCII přenášeno pomocí 7 bitů a osmá může být použita pro kontrolu parity. Pozdější vývoj rozšířil původní schéma ASCII tak, aby zahrnoval několik diakritických, matematických a terminálních znaků.

    S nedávným nárůstem používání počítačů po celém světě stále více lidí z různých jazyků mělo přístup k počítači. To znamenalo, že pro každý jazyk musely být vytvořeny nové kódovací schémata nezávisle na ostatních schématech, které by byly konfliktní, pokud by byly čteny z různých jazykových terminálů.

    Unicode vznikla jako řešení existence různých terminálů sloučením všech možných smysluplných znaků do jediné abstraktní znakové sady.

    UTF-8 je jedním ze způsobů kódování sady znaků Unicode. Jedná se o kódování s proměnnou šířkou (tj. Různé znaky mohou mít různé velikosti) a bylo navrženo pro zpětnou kompatibilitu s bývalým schématem ASCII. Jako takový zůstane znaková sada ASCII o velikosti jednoho bajtu, zatímco jiné znaky mají dva nebo více bajtů. UTF-16 je další způsob kódování znakové sady Unicode. Ve srovnání s UTF-8 jsou znaky kódovány jako sada jedné nebo dvou 16bitových kódových jednotek.

    Jak je uvedeno v dalších komentářích, znak "a" zaujímá jeden bajt, zatímco "t" zaujímá dva bajty, označující kódování UTF-8. Další bajt v původní otázce byl způsoben existencí nového řádku na konci.

    Následuje odpověď od ernie:

    1 bajt je 8 bitů a může tak představovat až 256 (2 ^ 8) rozdílných hodnot.

    Pro jazyky, které vyžadují více možností než toto, nemůže být zachováno jednoduché mapování 1 až 1, takže je zapotřebí více dat pro uložení znaku.

    Všimněte si, že většina kódování obvykle používá prvních 7 bitů (128 hodnot) pro znaky ASCII. To zanechává 8. bit nebo 128 více hodnot pro více znaků. Přidat znaky s diakritikou, asijské jazyky, azbuky, atd. A snadno zjistíte, proč 1 bajt nestačí k držení všech znaků.


    Musíte něco přidat k vysvětlení? Vyjměte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.