Calcolo della dimensione in byte UTF-8
Dati di input
| Testo | Héllo |
|---|
Calcolo della dimensione in byte UTF-8
Inserisci un testo qualsiasi per conoscerne la dimensione in byte UTF-8, la dimensione in byte UTF-16 e il numero di caratteri (punti di codice). Le lettere ASCII occupano un byte UTF-8 ciascuna, le lettere accentate due, la maggior parte degli altri sistemi di scrittura tre e gli emoji quattro: per questo la dimensione in byte di una stringa può superare il numero di caratteri visibili.
Dati di input
Testo
Risultati
Inserisci un valore per visualizzare i risultati.
Dimensione
Dimensione in byte UTF-8
Una stringa di testo e il numero di byte che occupa non sono la stessa cosa. Sullo schermo una parola è una sequenza di caratteri; nella memoria e in rete è una sequenza di byte, e i due conteggi raramente coincidono. Questa calcolatrice prende un testo e restituisce tre numeri: quanti caratteri (punti di codice Unicode) contiene, quanti byte occupa come UTF-8 e quanti byte occupa come UTF-16. È utile per dimensionare le colonne dei database, verificare i limiti di API e di lunghezza dei messaggi e capire perché una stringa apparentemente breve può essere sorprendentemente grande.
Caratteri e byte
Un carattere è un’unità di scrittura: una lettera, una cifra, un ideogramma, un emoji. Unicode assegna a ciascuno un numero chiamato punto di codice, scritto ad esempio U+00E9. Un byte è un’unità di memorizzazione di otto bit. Una codifica è la regola che trasforma i punti di codice in byte, e codifiche diverse producono conteggi di byte diversi per lo stesso testo.
In italiano corrente la differenza passa inosservata, perché nelle codifiche più comuni ogni carattere ASCII corrisponde a un numero esatto di byte. Lo scarto emerge non appena il testo contiene lettere accentate, sistemi di scrittura non latini o emoji.
Come UTF-8 dimensiona un carattere
UTF-8 è una codifica a larghezza variabile: un carattere occupa da uno a quattro byte a seconda del suo punto di codice.
U+0000–U+007F(ASCII: lettere latine senza accento, cifre, punteggiatura comune): 1 byteU+0080–U+07FF(accenti latini, greco, cirillico, ebraico, arabo): 2 byteU+0800–U+FFFF(la maggior parte delle scritture CJK e altre): 3 byteU+10000e oltre (emoji e caratteri rari): 4 byte
Poiché i caratteri ASCII restano di un byte, UTF-8 è retrocompatibile con ASCII, il che spiega in gran parte perché sia diventato la codifica predefinita del web e dei file di testo.
Come UTF-16 dimensiona un carattere
UTF-16 memorizza la maggior parte dei caratteri in una singola unità di codice a 16 bit, cioè due byte. I caratteri oltre U+FFFF — emoji e altri simboli rari — vengono memorizzati come coppia surrogata di due unità di codice e occupano quindi quattro byte. Non esiste il caso da un byte: persino una normale lettera ASCII costa due byte in UTF-16. È il formato delle stringhe in memoria di linguaggi come Java, C# e JavaScript.
Esempio svolto
Prendiamo il testo Héllo.
Ci sono 5 caratteri ma 6 byte UTF-8, perché é ricade nell’intervallo a due byte. In UTF-16 ciascuno dei 5 caratteri è un’unità di codice da due byte, per un totale di 10 byte.
Prendiamo ora un singolo emoji, 😀 (U+1F600). È un carattere, ma si trova oltre U+FFFF. UTF-8 lo codifica in quattro byte e UTF-16 lo memorizza come coppia surrogata, anch’essa di quattro byte — eppure il conteggio dei caratteri è solo 1.
Perché la dimensione in byte è importante
I limiti dei sistemi reali si contano di solito in byte, non in caratteri. Una colonna VARCHAR(255) può limitare i byte o i caratteri a seconda del database e del set di caratteri; le restrizioni sulla lunghezza dei messaggi, i campi del payload delle API, le dimensioni degli header HTTP e i validatori dei moduli sono spesso espressi in byte. Misurare in anticipo la dimensione in byte UTF-8 indica se un valore entrerà e quanto spazio o banda consumerà, cosa che il solo conteggio dei caratteri non può rivelare.
Calcolatrici correlate
Per vedere i valori effettivi dei byte di una stringa come codici binari, esadecimali e decimali, usa il Convertire testo in binario / esadecimale / ASCII. Per misurare la dimensione di un testo una volta avvolto in Base64 per il trasporto, vedi il Calcolatore dell'Overhead di Codifica Base64. E per stimare quanta informazione trasporta una stringa anziché quanto spazio occupa, il Calcolatore di entropia di Shannon ne calcola l’entropia.
Domande frequenti (FAQ)
Perché la dimensione in byte è maggiore del numero di caratteri?
Un carattere è ciò che si vede; un byte è il modo in cui viene memorizzato. In UTF-8 solo i caratteri ASCII di base (lettere latine senza accento, cifre, punteggiatura comune) entrano in un singolo byte. Le lettere accentate come la é usano due byte, la maggior parte degli altri sistemi di scrittura tre e gli emoji quattro. Quindi qualsiasi testo con caratteri non ASCII occupa più byte di quanti caratteri abbia.
In UTF-16 la differenza è ancora maggiore per il testo ASCII, perché lì ogni carattere usa almeno due byte.
Qual è la differenza tra UTF-8 e UTF-16?
Entrambi sono modi di trasformare i caratteri Unicode in byte. UTF-8 usa una larghezza variabile da uno a quattro byte per carattere ed è retrocompatibile con ASCII, il che lo rende la codifica dominante sul web e nei file. UTF-16 usa due byte per la maggior parte dei caratteri e quattro per quelli rari oltre il Piano Multilingue di Base (come gli emoji); è la rappresentazione in memoria tipica di linguaggi come Java, C# e JavaScript.
Per un testo prevalentemente latino UTF-8 è più compatto; per testi dominati da scritture dell’Asia orientale i due sono spesso paragonabili.
Quanti byte occupa un carattere?
In UTF-8 dipende dal punto di codice: U+0000–U+007F (ASCII) un byte, U+0080–U+07FF (accenti latini, greco, cirillico, ebraico, arabo) due byte, U+0800–U+FFFF (la maggior parte delle scritture CJK e altre) tre byte e U+10000 in poi (emoji, caratteri rari) quattro byte.
In UTF-16 gli stessi caratteri occupano due byte fino a U+FFFF e quattro oltre, dove vengono memorizzati come coppia surrogata (surrogate pair).
Quando è importante la dimensione in byte?
L’archiviazione e la trasmissione si misurano in byte, non in caratteri. Una colonna di database dichiarata come VARCHAR(255) può limitare byte o caratteri a seconda del motore e del set di caratteri; i campi delle API, i limiti di lunghezza dei messaggi e le convalide dei moduli sono spesso espressi in byte. Conoscere la dimensione in byte UTF-8 aiuta a prevedere se un valore entrerà e quanto spazio o banda consumerà.
Da provare dopo
Convertire testo in binario / esadecimale / ASCII
Inserisci un testo qualsiasi per vederlo in binario, esadecimale e codici decimali dei caratteri. Binario ed esadecimale seguono la sequenza di byte UTF-8, mentre il decimale riporta il punto di codice Unicode di ogni carattere, ovvero il valore ASCII familiare per il testo inglese semplice.