# Codifica e segmentazione dei messaggi SMS: GSM-7, Unicode (UCS-2) e messaggi multipart

> Un SMS trasporta 140 byte: 160 caratteri GSM-7, o solo 70 in Unicode (UCS-2). La codifica, l'UDH e la segmentazione determinano il limite di caratteri e il costo degli SMS.

- URL canonico: https://www.broadnet.me/it/blog/sms-encoding-segmentation-gsm7-ucs2
- Lingua: it
- Ultimo aggiornamento: 2026-10-20
- Editore: BroadNet (https://www.broadnet.me)

- Pubblicato il: 2026-08-03
- Autore: BroadNet Editorial Team

Il limite di caratteri per gli SMS dipende interamente dalla codifica. Ogni SMS ha un payload fisso di 140 byte, quindi un messaggio che utilizza l'alfabeto predefinito GSM-7 può contenere 160 caratteri, mentre un messaggio contenente un carattere non GSM-7 (come un'emoji, una lettera araba o una virgoletta) passa alla codifica UCS-2 a 16 bit e ne può contenere solo 70. I testi più lunghi vengono suddivisi in segmenti fatturati separatamente.

> Desideri conoscere i numeri relativi a un messaggio specifico? Incollalo nel [calcolatore di segmenti SMS](https://www.broadnet.me/tools/sms-segment-calculator) per visualizzare la codifica, il numero di segmenti e il budget di caratteri, oppure controlla esattamente quali caratteri forzano l'utilizzo di Unicode con il [verificatore GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).

## Tutto deriva da 140 byte

Il corpo di un messaggio SMS, ovvero il campo che il 3GPP chiama TP-User-Data, ha un limite di 140 ottetti, o 1.120 bit. Questo singolo vincolo determina ogni conteggio di caratteri che vi verrà mai indicato. Il numero di caratteri che possono essere inseriti è semplicemente 1.120 diviso per il numero di bit occupati da ciascun carattere, quindi l'unica vera domanda è quale codifica venga utilizzata dal vostro testo. In pratica, due codifiche sono rilevanti: GSM-7 e UCS-2.

## GSM-7 contro UCS-2: due modi per comprimere gli stessi 140 byte

### GSM-7: l'alfabeto predefinito a 7 bit

GSM-7 è l'alfabeto SMS predefinito definito nello standard 3GPP TS 23.038. Codifica ogni carattere in 7 bit, quindi 1.120 bit contengono 160 caratteri, il limite classico per un singolo SMS. La sua tabella comprende le lettere latine, le cifre, la punteggiatura comune e alcuni simboli. È importante notare che un piccolo insieme di caratteri si trova in un'estensione del set di caratteri di base e ciascuno di essi occupa due set di bit, perché viene codificato come un byte di escape seguito dal carattere stesso. Questi caratteri sono ^ { } \ [ ] ~ | e il simbolo dell'euro €. Un messaggio riempito con simboli dell'euro può quindi contenere solo 80 caratteri in un singolo SMS, non 160.

Con il [GSM-7 / Unicode checker](https://www.broadnet.me/tools/gsm7-unicode-checker) puoi vedere esattamente quali caratteri del tuo testo sono inclusi nell'alfabeto, estesi o non inclusi nell'alfabeto prima di inviarlo.

### UCS-2: Unicode a 16 bit

Quando il testo contiene anche un solo carattere non rappresentabile dallo standard GSM-7, l'intero messaggio viene ricodificato in UCS-2, una codifica Unicode a larghezza fissa a 16 bit. Con 16 bit per carattere, 1.120 bit possono contenere solo 70 caratteri. Non sono previsti aggiornamenti parziali né combinazioni: un singolo carattere fuori alfabeto dimezza il budget disponibile, da 160 a 70. Non si tratta di un bug: un SMS dichiara una codifica per l'intero corpo del messaggio, quindi il mittente deve scegliere quella che può rappresentare ogni singolo carattere presente.

## I limiti dei caratteri, uno accanto all'altro

| Codifica | Bit per carattere | SMS singolo | Per segmento (in più parti) |
|---|---|---|---|
| GSM-7 (alfabeto predefinito) | 7 | 160 | 153 |
| UCS-2 (Unicode a 16 bit) | 16 | 70 | 67 |

I valori per segmento sono inferiori ai limiti per singolo messaggio perché un messaggio concatenato impiega parte dei suoi 140 byte per un'intestazione, argomento trattato in seguito. Si noti che i caratteri di estensione menzionati sopra occupano comunque due posizioni GSM-7 all'interno di un segmento, quindi un segmento pieno di parentesi quadre o simboli dell'euro contiene molti meno di 153 caratteri visibili.

## Come funziona un SMS multiparte (concatenato)

Il testo più lungo di un singolo messaggio non viene troncato: l'SMSC mittente lo suddivide in segmenti, ognuno dei quali costituisce un SMS autonomo, e il dispositivo ricevente li ricompone prima della visualizzazione. Il coordinamento è gestito da un User Data Header (UDH) posizionato all'inizio del payload di ciascun segmento, come definito nella norma 3GPP TS 23.040. Per la concatenazione standard, l'UDH è di 6 byte e contiene un numero di riferimento condiviso da ogni parte, il numero totale di parti e il numero di sequenza di ciascuna parte, in modo che il dispositivo possa riassemblarle nell'ordine corretto.

```
UDH per un SMS concatenato = 6 byte

05 00 03 RR TT SS
| | | | | |

| | | | | +- numero di sequenza di questa parte (1..TT)
| | | | +---- numero totale di parti (TT)

| | | +------- numero di riferimento (identico per ogni parte)

| | +---------- lunghezza di questo elemento informativo = 3

| +------------- IEI = 00 (SMS concatenato, riferimento a 8 bit)

+---------------- Lunghezza UDH = 05 (seguono altri 5 byte)
```

Quei 6 byte provengono dallo stesso payload di 140 byte, lasciando 134 byte per il testo. Ecco perché un messaggio multipart contiene 153 caratteri GSM-7 per segmento (l'intestazione è allineata a sette caratteri, occupando sette delle 160 posizioni) e 67 caratteri UCS-2 per segmento (134 byte ÷ 2). Alcune piattaforme utilizzano un UDH di 7 byte con un numero di riferimento a 16 bit, che riduce questi valori a 152 e 66. Il [calcolatore di segmenti SMS](https://www.broadnet.me/tools/sms-segment-calculator) mostra la suddivisione esatta per qualsiasi lunghezza del messaggio.

## Perché una sola emoji o un solo carattere arabo possono cambiare tutto

È qui che i mittenti rimangono sorpresi. Poiché un singolo carattere non GSM-7 costringe l'intero messaggio a utilizzare UCS-2, una notifica in inglese di 150 caratteri che si adatta comodamente a un singolo segmento può ridursi silenziosamente a 70 caratteri – e suddividersi in tre segmenti – nel momento in cui qualcuno incolla un'emoji o una virgoletta stilizzata da un elaboratore di testi. Il numero di caratteri visibili non cambia; cambia la codifica.

Per chi invia messaggi al mercato arabo, questo non è un caso limite, ma la norma. L'alfabeto arabo non è presente nello standard GSM-7, quindi ogni SMS in arabo è in formato UCS-2 fin dal primo carattere: 70 caratteri in un singolo messaggio, 67 per segmento successivo. Un messaggio bilingue arabo-inglese, o un codice OTP in arabo personalizzato, attraversa rapidamente più segmenti. I team che inviano messaggi nei Paesi del CCG, Arabia Saudita, Emirati Arabi Uniti ed Egitto dovrebbero pianificare fin dall'inizio il budget di ogni modello di messaggio in arabo in unità UCS-2, non GSM-7.

Caratteri comuni che inviano silenziosamente un intero messaggio a UCS-2:

- Qualsiasi tipo di emoji, inclusa una singola emoji finale 😀, può essere utilizzata in un messaggio di marketing.
- Arabo, ebraico, cirillico, greco, cinese e altri alfabeti non latini.
- Virgolette e apostrofi riccioluti (' ' " ") incollati da programmi di elaborazione testi.
- Il trattino medio e il trattino lungo (– —), i puntini di sospensione (…) e lo spazio unificatore.
- Molte lettere latine accentate non presenti nella tabella GSM-7.

## Quanto ti costa la segmentazione?

Ogni segmento viene valutato e fatturato come un messaggio separato. Un avviso GSM-7 di 160 caratteri corrisponde a un SMS fatturabile; aggiungendo un carattere, si ottengono due segmenti, fino a una capacità di 306 caratteri, fatturati come due messaggi separati. Un codice OTP in arabo di soli 75 caratteri corrisponde già a due segmenti UCS-2 e, di conseguenza, a due messaggi, anche se sembra breve. A livello di OTP e di campagne, la disciplina di codifica è un elemento imprescindibile, non un dettaglio estetico.

1. Mantieni i modelli transazionali all'interno di un unico segmento — 160 GSM-7 o 70 UCS-2 — laddove la lingua lo consenta.
2. Rimuovi i caratteri Unicode accidentali: normalizza le virgolette curve, i trattini e gli spazi unificatori nei loro equivalenti GSM-7 prima dell'invio.
3. Convalida la codifica e il numero di segmenti in fase di creazione, non dopo la fattura, utilizzando uno strumento di verifica nella tua pipeline di invio.
4. Modelli di bilancio in arabo e altre lingue non latine in unità UCS-2 (70/67) fin dall'inizio.
5. Elimina i contenuti variabili, come URL e nomi di commercianti lunghi, che potrebbero far sì che un messaggio superi il confine di un segmento durante l'esecuzione.

> L'API SMS di BroadNet (/products/sms-api) segnala la codifica risolta e il numero di segmenti per ogni messaggio prima dell'invio e in ogni ricevuta di consegna, consentendo di visualizzare e controllare la segmentazione in produzione anziché scoprirla in fattura. I dettagli completi delle richieste e delle risposte sono disponibili nella documentazione per sviluppatori (/developers).

## Domande frequenti

### Quanti caratteri può contenere un SMS?

Un SMS trasporta un payload di 140 byte. Utilizzando l'alfabeto predefinito GSM-7, che corrisponde a 160 caratteri, se il testo contiene caratteri non presenti nell'alfabeto GSM-7 (come emoji, lettere accentate o arabe o virgolette), il messaggio passa alla codifica UCS-2 e può contenere fino a 70 caratteri. I testi più lunghi vengono suddivisi in segmenti concatenati di 153 (GSM-7) o 67 (UCS-2) caratteri ciascuno.

### Perché il mio SMS viene conteggiato solo come 70 caratteri?

Poiché un elemento del testo non è presente nell'alfabeto GSM-7, l'intero messaggio è stato ricodificato in UCS-2 a 16 bit, che supporta solo 70 caratteri. I principali responsabili sono solitamente emoji, caratteri non latini, virgolette, trattini o spazi unificatori copiati da un programma di elaborazione testi. Sostituendo o rimuovendo il carattere in questione, il messaggio rientra nel limite di 160 caratteri dello standard GSM-7.

### Cos'è la codifica UCS-2 negli SMS?

UCS-2 è la codifica Unicode a 16 bit a larghezza fissa utilizzata dagli SMS quando il testo non può essere rappresentato con l'alfabeto GSM-7 a 7 bit. Due byte per carattere significano che il payload di 140 byte può contenere 70 caratteri in un singolo messaggio, o 67 per segmento in un messaggio multipart. Qualsiasi carattere arabo, emoji o altro carattere non GSM-7 presente nel corpo del messaggio forza la conversione dell'intero SMS in UCS-2.

### Perché il mio messaggio si è diviso in due?

Il testo superava il limite di caratteri per singolo messaggio previsto dalla codifica (160 in GSM-7 o 70 in UCS-2), pertanto è stato inviato come messaggio concatenato (in più parti). Ogni segmento contiene un'intestazione di dati utente di 6 byte per la ricomposizione, riducendo la capacità a 153 (GSM-7) o 67 (UCS-2) caratteri per parte, e ogni segmento viene fatturato come un messaggio separato.

## Riferimenti

- 3GPP TS 23.038 — Alfabeti e informazioni specifiche per la lingua (alfabeto predefinito GSM-7 e UCS-2): [3gpp.org](https://www.3gpp.org/)
- 3GPP TS 23.040 — Realizzazione tecnica del servizio di messaggistica breve (SMS), incluso l'intestazione dei dati utente: [3gpp.org](https://www.3gpp.org/)
- BroadNet — strumenti: [calcolatore di segmenti SMS](https://www.broadnet.me/tools/sms-segment-calculator) e [verificatore GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).
