Conteggio dei byte di una stringa, per codifica
Misura quanti byte occupa la stringa inserita in UTF-8, Shift_JIS, EUC-JP, UTF-16 e JIS (ISO-2022-JP). Utile per verificare i limiti di lunghezza dei campi di una base di dati e i limiti d'immissione dei moduli.
Consigli
- In UTF-8 le lettere e le cifre latine occupano un byte, mentre gli ideogrammi e i sillabari giapponesi ne occupano nella maggior parte dei casi tre: a parità di caratteri, dunque, un testo in italiano e uno in giapponese hanno lunghezze in byte molto diverse.
- Nei sistemi datati in cui una colonna della base di dati impone un limite espresso in byte, come VARCHAR(255), un testo che contiene ideogrammi raggiunge il limite assai prima di uno in caratteri latini.
- Molte faccine sono rappresentate da una coppia surrogata, cioè da due unità di codice, e occupano quattro byte sia in UTF-8 sia in UTF-16: è questa la ragione per cui nei conteggi dei caratteri delle reti sociali si raggiunge il limite prima del previsto.
- Se conoscete già il numero di byte e volete convertirlo in KB, MB o altre unità, usate lo strumento affine per la conversione delle unità di capacità. Questo si occupa invece del calcolo inverso: dalla stringa al numero di byte.
Domande frequenti
A proposito — il legame poco noto fra i limiti di caratteri delle reti sociali e il numero di byte
Il gruppo di caratteri chiamato «utf8» nelle vecchie versioni di MySQL non era in grado di conservare le faccine di Unicode, cioè i caratteri supplementari a partire da U+10000. UTF-8 è per sua natura una codifica a lunghezza variabile fino a quattro byte, ma l'«utf8» di MySQL, per ragioni storiche, ne trattava al massimo tre: per anni si segnalarono errori nell'inserimento di testi contenenti faccine. Oggi si raccomanda il passaggio a «utf8mb4», che gestisce correttamente i quattro byte: un esempio emblematico di quanto importi comprendere con precisione le specifiche delle codifiche e delle lunghezze in byte.
Quando Twitter, oggi X, imponeva il limite di 140 caratteri, si discusse a lungo di un'iniquità: in 140 caratteri un utente giapponese scriveva un testo ampiamente compiuto, mentre uno di lingua inglese arrivava appena a venti o trenta parole. La ragione sta nel fatto che in inglese una lettera dell'alfabeto vale un carattere, mentre un singolo ideogramma giapponese racchiude molta più informazione. In seguito Twitter introdusse un sistema proprio di ponderazione, contando un carattere per le lingue come il giapponese e in certi casi due byte per un carattere nelle lingue come l'inglese, così da riequilibrare le condizioni.
Una vicenda analoga riguarda i messaggi brevi dei telefoni cellulari. Nel sistema GSM un messaggio arriva di norma a 160 caratteri, ma basta un solo carattere estraneo al gruppo GSM a sette bit — una faccina o un ideogramma — perché la codifica passi a UCS-2, equivalente a UTF-16, e il limite crolli di colpo a settanta caratteri. Il fenomeno per cui «un solo carattere giapponese dimezza abbondantemente il numero di caratteri inviabili» è l'esempio più tipico del rapporto fra codifiche e lunghezza in byte di cui tratta questa pagina.