UCS-2 è la codifica a 16 bit che gli SMS usano per qualsiasi testo contenente caratteri esterni all'alfabeto GSM-7 — scritture non latine, emoji, virgolette tipografiche. Ogni carattere occupa due ottetti, quindi un singolo SMS UCS-2 contiene 70 caratteri e i segmenti concatenati ne contengono 67 ciascuno. Un solo carattere non-GSM-7 impone l'intero messaggio a UCS-2.
Perché gli SMS hanno bisogno di UCS-2
GSM-7 copre solo 128 caratteri più un piccolo insieme di estensione. Qualsiasi altra cosa — arabo, cinese, cirillico, ebraico, thai, emoji, e persino caratteri tipografici come le virgolette curve e i trattini medi — non è rappresentabile. Per questi, gli SMS passano a UCS-2, una codifica a larghezza fissa di 16 bit (di fatto UTF-16 big-endian per il Basic Multilingual Plane). È segnalata da data_coding 0x08.
Capacità: 70 e 67
Il campo dei dati utente dell'SMS è di 140 ottetti. A due ottetti per carattere, UCS-2 fa entrare 70 caratteri in un singolo messaggio. Quando un messaggio è concatenato, l'User Data Header di 6 byte consuma payload, lasciando 134 ottetti — 67 caratteri per segmento. È meno della metà della capacità di GSM-7, ed è per questo che la scelta della codifica ha un forte impatto sui costi.
| Codifica | Singolo SMS | Per segmento concatenato |
|---|---|---|
| GSM-7 (7-bit) | 160 caratteri | 153 caratteri |
| Binario a 8 bit | 140 byte | 134 byte |
| UCS-2 (16-bit) | 70 caratteri | 67 caratteri |
Cosa attiva UCS-2
La codifica è tutto-o-niente per messaggio: un solo carattere esterno a GSM-7 impone l'intero messaggio a UCS-2, riducendo la capacità da 160 a 70. I colpevoli comuni sono facili da introdurre inavvertitamente — un apostrofo curvo da un elaboratore di testi, un trattino lungo, un'emoji o un nome non latino. Rilevarli prima dell'invio è la leva più importante sul costo degli SMS.
| Categoria | Esempi |
|---|---|
| Emoji | 😀 ✅ 🚀 ❤️ |
| Punteggiatura tipografica | ' ' “ ” – — … |
| Script non latini | العربية · 中文 · Кириллица · עברית · ไทย |
| Lettere accentate non presenti in GSM-7 | â ê î ô û ã õ ą ę ř |
L'insidia delle coppie surrogate
UCS-2 è strettamente a 16 bit e copre il Basic Multilingual Plane di Unicode. I caratteri oltre U+FFFF — molte emoji moderne, ad esempio — sono rappresentati in UTF-16 come coppie surrogate di due unità di codice a 16 bit, quindi una singola di queste emoji consuma quattro ottetti (due 'caratteri' UCS-2). Un messaggio che sembra una sola emoji può perciò contare come due rispetto al limite di 70/67.
Domande frequenti
Quanti caratteri entrano in un SMS Unicode?
70 caratteri in un singolo messaggio UCS-2 e 67 per segmento quando il messaggio è concatenato. Questo perché ogni carattere è di 16 bit (due ottetti) rispetto al limite di 140 ottetti del payload SMS.
Cosa fa passare un SMS a UCS-2?
Qualsiasi singolo carattere esterno all'alfabeto GSM-7 — un'emoji, una virgoletta curva, un trattino lungo o testo non latino — impone l'intero messaggio a UCS-2. La codifica è scelta per messaggio, non per carattere.
UCS-2 è uguale a UTF-16?
Quasi. UCS-2 è a 16 bit fissi e copre il Basic Multilingual Plane. Gli SMS trattano il payload come UTF-16 big-endian, quindi i caratteri oltre U+FFFF (molte emoji) diventano coppie surrogate e occupano quattro ottetti.
Perché a volte un'emoji conta come due caratteri?
Le emoji oltre U+FFFF sono codificate come coppie surrogate UTF-16 — due unità di codice a 16 bit — quindi un singolo glifo consuma due dei 70 (o 67) slot di caratteri UCS-2 disponibili.
Come evito di inviare inavvertitamente UCS-2?
Sanificate l'input prima dell'invio: sostituite virgolette e trattini tipografici con i loro equivalenti ASCII, rimuovete o traslitterate gli accenti spuri e verificate la presenza di emoji. Un verificatore GSM-7/Unicode segnala i caratteri esatti che impongono UCS-2.
Specifiche della fonte
Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.