Úvodná » ako » Prečo anglické znaky potrebujú menej bajtov na ich reprezentáciu ako znaky v iných abecedách?

    Prečo anglické znaky potrebujú menej bajtov na ich reprezentáciu ako znaky v iných abecedách?

    Zatiaľ čo väčšina z nás sa pravdepodobne nikdy neskončila premýšľať o tom, abecedné znaky nie sú rovnakej veľkosti v počte bajtov, ktoré sú potrebné na ich zastupovanie. Ale prečo je to tak? Dnešný príspevok SuperUser Q & A má odpovede na otázku zvedavého čitateľa.

    Dnešná relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, zoskupenia webových stránok typu Q & A.

    Časť ASCII grafu snímku so súhlasom Wikipédie.

    Otázka

    Čítačka SuperUser khajvah chce vedieť, prečo rôzne abecedy zaberajú rôzne veľkosti miesta na disku, keď sú uložené:

    Keď vložím 'a' do textového súboru a uložím ho, robí to 2 bajty vo veľkosti. Ale keď som dal znak ako '' '(list z arménskej abecedy) v, to robí to 3 bajty vo veľkosti.

    Aký je rozdiel medzi abecedami na počítači? Prečo angličtina zaberá menej miesta pri ukladaní?

    Písmená sú listy, nie? Možno nie! Aká je odpoveď na toto abecedné tajomstvo?

    Odpoveď

    Sponzori SuperUser Doktor Reichard a ernie majú odpoveď pre nás. Po prvé, doktor Reichard:

    Jedným z prvých kódovacích schém, ktoré sa majú vyvinúť na použitie v bežných počítačoch, je ASCII (Americký štandardný kód pre výmenu informácií). Bola vyvinutá v šesťdesiatych rokoch v Spojených štátoch.

    Anglická abeceda používa časť latinskej abecedy (napríklad existuje niekoľko slov s diakritikou v angličtine). V tejto abecede je 26 samostatných písmen, bez uvažovania prípadu. A tam by tiež museli existovať jednotlivé čísla a interpunkčné znamienka v akejkoľvek schéme, ktorá predstiera, že kódovanie anglickej abecedy.

    Šesťdesiatych rokoch bol aj čas, keď počítače nemali množstvo pamäte alebo diskového priestoru, ktoré máme teraz. ASCII bola vyvinutá ako štandardná reprezentácia funkčnej abecedy vo všetkých amerických počítačoch. V tom čase bolo rozhodnutie urobiť každý znak ASCII 8 bajtov dlhý kvôli technickým podrobnostiam času (v článku Wikipedia sa uvádza, že perforovaná páska má 8 bitov v pozícii naraz). V skutočnosti môže byť pôvodná schéma ASCII prenášaná pomocou 7 bitov a osem môže byť použitá na kontrolu parity. Neskorší vývoj rozšíril pôvodnú schému ASCII tak, aby zahŕňal niekoľko diakritických, matematických a terminálnych znakov.

    S nedávnym nárastom využívania počítačov na celom svete malo stále viac a viac ľudí z rôznych jazykov prístup k počítaču. To znamená, že pre každý jazyk sa museli vyvinúť nové kódovacie schémy, nezávisle od iných schém, ktoré by boli v rozpore s prekladmi z rôznych jazykových terminálov.

    Unicode vznikla ako riešenie existencie rôznych terminálov zlúčením všetkých možných zmysluplných znakov do jedinej abstraktnej znakovej množiny.

    UTF-8 je jedným zo spôsobov kódovania znakovej sady Unicode. Ide o kódovanie s premennou šírkou (t. J. Rôzne znaky môžu mať rozdielne veľkosti) a bolo navrhnuté pre spätnú kompatibilitu s bývalou schémou ASCII. Znaková sada ASCII zostane o jeden bajt vo veľkosti, zatiaľ čo akékoľvek ďalšie znaky majú dva alebo viac bajtov. UTF-16 je ďalší spôsob kódovania znakovej sady Unicode. V porovnaní s UTF-8 sú znaky zakódované buď ako súprava jednej alebo dvoch 16-bitových kódových jednotiek.

    Ako je uvedené v iných komentároch, znak "a" zaberá jeden bajt, zatiaľ čo "t" zaberá dva bajty, označujúce kódovanie UTF-8. Tento extra bajt v pôvodnej otázke bol spôsobený existenciou znaku newline na konci.

    Nasledovala odpoveď od ernie:

    1 bajt je 8 bitov a môže tak predstavovať až 256 (2 ^ 8) rôznych hodnôt.

    Pre jazyky, ktoré vyžadujú viac možností ako toto, jednoduché mapovanie 1 až 1 nemôže byť zachované, takže je potrebných viac údajov na uloženie znaku.

    Všimnite si, že väčšina kódov používa prvých 7 bitov (128 hodnôt) pre znaky ASCII. To zanecháva 8. bit alebo 128 ďalších hodnôt pre viac znakov. Pridať znaky s diakritikou, ázijské jazyky, cyriliky atď. A môžete ľahko zistiť, prečo 1 bajt nestačí na to, aby ste držali všetky znaky.


    Máte niečo doplniť vysvetlenie? Znie to v komentároch. Chcete sa dozvedieť viac odpovedí od iných používateľov technickej úrovne Stack Exchange? Pozrite sa na celý diskusný príspevok tu.