Homepage » come » Perché i caratteri inglesi hanno bisogno di meno byte per rappresentarli rispetto ai caratteri in altri alfabeti?

    Perché i caratteri inglesi hanno bisogno di meno byte per rappresentarli rispetto ai caratteri in altri alfabeti?

    Mentre la maggior parte di noi probabilmente non ha mai smesso di pensarci, i caratteri alfabetici non hanno tutte le stesse dimensioni nel numero di byte necessari per rappresentarli. Ma perché è così? Il post di Q & A di SuperUser di oggi ha le risposte alla domanda di un lettore curioso.

    La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte basato sulla comunità.

    Schermata del grafico ASCII parziale per gentile concessione di Wikipedia.

    La domanda

    Il lettore SuperUser khajvah vuole sapere perché diversi alfabeti occupano diverse quantità di spazio su disco quando vengono salvati:

    Quando metto 'a' in un file di testo e lo salvi, ne rende 2 byte di dimensione. Ma quando metto un carattere come "ա" (una lettera dell'alfabeto armeno), lo rende di 3 byte di dimensione.

    Qual è la differenza tra alfabeti su un computer? Perché l'inglese occupa meno spazio quando viene salvato?

    Le lettere sono lettere, giusto? Forse no! Qual è la risposta a questo mistero alfabetico?

    La risposta

    Collaboratori SuperUser Doktoro Reichard e ernie hanno la risposta per noi. Prima su, Doktoro Reichard:

    Uno dei primi schemi di codifica da sviluppare nei computer mainstream è l'ASCII (Codice Standard Americano per Interscambio di Informazioni) standard. È stato sviluppato negli anni '60 negli Stati Uniti.

    L'alfabeto inglese usa parte dell'alfabeto latino (ad esempio, ci sono poche parole accentate in inglese). Ci sono 26 lettere individuali in quell'alfabeto, non considerando il caso. E ci dovrebbero anche esistere i numeri individuali e segni di punteggiatura in qualsiasi schema che finge di codificare l'alfabeto inglese.

    Gli anni '60 erano anche i tempi in cui i computer non avevano la quantità di memoria o spazio su disco che abbiamo ora. ASCII è stato sviluppato per essere una rappresentazione standard di un alfabeto funzionale su tutti i computer americani. Al momento, la decisione di rendere ogni carattere ASCII lungo 8 bit (1 byte) è stata presa a causa di dettagli tecnici del tempo (l'articolo di Wikipedia menziona il fatto che il nastro perforato conteneva 8 bit in una posizione alla volta). Infatti, lo schema ASCII originale può essere trasmesso usando 7 bit, e l'ottavo potrebbe essere usato per i controlli di parità. Sviluppi successivi hanno ampliato lo schema ASCII originale includendo diversi caratteri accentati, matematici e terminali.

    Con il recente aumento dell'uso del computer in tutto il mondo, sempre più persone di lingue diverse hanno avuto accesso a un computer. Ciò significava che, per ogni lingua, dovevano essere sviluppati nuovi schemi di codifica, indipendentemente da altri schemi, che sarebbero in conflitto se letti da terminali di lingue diverse.

    Unicode è nato come soluzione all'esistenza di diversi terminali unendo tutti i possibili personaggi significativi in ​​un unico set di caratteri astratti.

    UTF-8 è un modo per codificare il set di caratteri Unicode. È una codifica a larghezza variabile (ovvero caratteri diversi possono avere dimensioni diverse) ed è stata progettata per la retrocompatibilità con il precedente schema ASCII. Pertanto, il set di caratteri ASCII rimarrà di un byte mentre gli altri caratteri avranno dimensioni di due o più byte. UTF-16 è un altro modo per codificare il set di caratteri Unicode. In confronto a UTF-8, i caratteri sono codificati come un insieme di una o due unità di codice a 16 bit.

    Come affermato in altri commenti, il carattere 'a' occupa un singolo byte mentre 'ա' occupa due byte, indicando una codifica UTF-8. Il byte extra nella domanda originale era dovuto all'esistenza di un carattere di fine riga alla fine.

    Seguito dalla risposta di ernie:

    1 byte è 8 bit e può quindi rappresentare fino a 256 (2 ^ 8) valori diversi.

    Per le lingue che richiedono più possibilità di questo, non è possibile mantenere una semplice mappatura 1 a 1, quindi sono necessari più dati per memorizzare un personaggio.

    Nota che generalmente la maggior parte delle codifiche usa i primi 7 bit (128 valori) per i caratteri ASCII. Questo lascia l'ottavo bit o 128 valori in più per più caratteri. Aggiungi caratteri accentati, lingue asiatiche, cirillico, ecc. E puoi facilmente capire perché 1 byte non è sufficiente per contenere tutti i caratteri.


    Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.