# Codificação e segmentação de mensagens SMS: GSM-7, Unicode (UCS-2) e mensagens multipartes

> Um SMS transporta 140 bytes: 160 caracteres GSM-7 ou apenas 70 em Unicode (UCS-2). A codificação, o UDH e a segmentação definem o limite de caracteres e o custo do seu SMS.

- URL canônico: https://www.broadnet.me/pt/blog/sms-encoding-segmentation-gsm7-ucs2
- Idioma: pt
- Última atualização: 2026-10-10
- Editor: BroadNet (https://www.broadnet.me)

- Publicado em: 2026-08-03
- Autor: BroadNet Editorial Team

O limite de caracteres de um SMS depende inteiramente da codificação. Cada SMS carrega uma carga útil fixa de 140 bytes, portanto, uma mensagem usando o alfabeto padrão GSM-7 comporta 160 caracteres, enquanto uma que contenha qualquer caractere não GSM-7 — um emoji, uma letra árabe, uma aspa curva — utiliza a codificação UCS-2 de 16 bits e comporta apenas 70 caracteres. Textos mais longos são divididos em segmentos cobrados separadamente.

> Quer os números de uma mensagem específica? Cole-os na [calculadora de segmentos SMS](https://www.broadnet.me/tools/sms-segment-calculator) para ver a codificação, a contagem de segmentos e o limite de caracteres, ou verifique exatamente quais caracteres forçam o Unicode com o [verificador GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).

## Tudo deriva de 140 bytes

O corpo de uma mensagem SMS — o campo que o 3GPP chama de TP-User-Data — tem um limite de 140 octetos, ou 1.120 bits. Essa única restrição determina toda a contagem de caracteres que você verá citada. A quantidade de caracteres que cabem é simplesmente 1.120 dividido pelo número de bits que cada caractere consome; portanto, a única questão real é qual codificação o seu texto utiliza. Duas codificações são importantes na prática: GSM-7 e UCS-2.

## GSM-7 vs UCS-2: duas maneiras de compactar os mesmos 140 bytes

### GSM-7: o alfabeto padrão de 7 bits

GSM-7 é o alfabeto padrão para SMS, definido na especificação 3GPP TS 23.038. Ele codifica cada caractere em 7 bits, portanto, 1.120 bits comportam 160 caracteres — o limite clássico de um único SMS. A sua tabela abrange o alfabeto latino, dígitos, pontuação comum e alguns símbolos. Crucialmente, um pequeno conjunto de caracteres reside numa extensão de conjunto de caracteres básica e cada um custa dois septetos, pois é codificado como um byte de escape seguido pelo caractere. Esses caracteres são ^ { } \ [ ] ~ | e o símbolo do euro €. Uma mensagem preenchida com símbolos do euro, portanto, comporta apenas 80 caracteres num único SMS, e não 160.

Você pode ver exatamente quais caracteres no seu texto são alfabéticos, extensões ou não alfabéticos com o [verificador GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker) antes de enviar.

### UCS-2: Unicode de 16 bits

Quando o texto contém um único caractere que o GSM-7 não consegue representar, toda a mensagem é recodificada em UCS-2, uma codificação Unicode de 16 bits com largura fixa. Com 16 bits por caractere, 1.120 bits comportam apenas 70 caracteres. Não há atualização parcial nem mistura de caracteres: um único caractere fora do alfabeto reduz pela metade o limite de 160 para 70 bits. Isso não é um bug — um SMS declara uma codificação para todo o seu corpo, portanto, o remetente deve escolher aquela que consegue representar todos os caracteres presentes.

## Os limites de caracteres, lado a lado

| Codificação | Bits por caractere | SMS único | Por segmento (multipartes) |
|---|---|---|---|
| GSM-7 (alfabeto padrão) | 7 | 160 | 153 |
| UCS-2 (Unicode de 16 bits) | 16 | 70 | 67 |

Os valores por segmento são inferiores aos limites de mensagem única porque uma mensagem concatenada utiliza parte de seus 140 bytes num cabeçalho, que será abordado a seguir. Observe que os caracteres de extensão mencionados acima ainda ocupam duas posições GSM-7 dentro de um segmento, portanto, um segmento repleto de colchetes ou símbolos de euro comporta bem menos de 153 caracteres visíveis.

## Como funciona o SMS multipart (concatenado)

Textos com mais de uma mensagem não são truncados — o SMSC remetente os divide em segmentos, cada um um SMS independente, e o aparelho recetor os junta novamente antes de exibi-los. A coordenação é feita por um Cabeçalho de Dados do Utilizador (UDH) colocado no início da carga útil de cada segmento, definido na especificação 3GPP TS 23.040. Para concatenação padrão, o UDH tem 6 bytes e contém um número de referência partilhado por todas as partes, a contagem total de partes e o número de sequência dessa parte, para que o aparelho possa remontá-las na ordem correta.

```
UDH para um SMS concatenado = 6 bytes

05 00 03 RR TT SS

| | | | | |

| | | | | +- número de sequência desta parte (1..TT)

| | | | +---- número total de partes (TT)

| | | +------- número de referência (idêntico em todas as partes)

| | +---------- comprimento deste elemento de informação = 3

| +------------- IEI = 00 (SMS concatenado, referência de 8 bits)

+---------------- Comprimento do UDH = 05 (seguem-se mais 5 bytes)
```

Esses 6 bytes são extraídos da mesma carga útil de 140 bytes, restando 134 bytes para o texto. É por isso que uma mensagem multipart contém 153 caracteres GSM-7 por segmento (o cabeçalho é alinhado em septetos, consumindo sete das 160 posições) e 67 caracteres UCS-2 por segmento (134 bytes ÷ 2). Algumas plataformas usam um UDH de 7 bytes com um número de referência de 16 bits, o que reduz esses valores para 152 e 66. A [calculadora de segmentos SMS](https://www.broadnet.me/tools/sms-segment-calculator) mostra a divisão exata para qualquer comprimento de mensagem.

## Porque um emoji ou um caractere árabe muda tudo?

É aqui que os remetentes se surpreendem. Como um único caractere que não seja GSM-7 força toda a mensagem a usar UCS-2, uma notificação em inglês de 150 caracteres, que cabe confortavelmente num único segmento, pode silenciosamente cair para um limite de 70 caracteres — e ser dividida em três segmentos — no momento em que alguém cola um emoji ou uma aspa estilizada de um processador de texto. A quantidade de caracteres visíveis não mudou; a codificação, sim.

Para remetentes do mercado árabe, isso não é uma exceção, mas sim o padrão. O alfabeto árabe não faz parte do padrão GSM-7, portanto, cada SMS em árabe utiliza o formato UCS-2 desde o primeiro caractere: 70 caracteres numa única mensagem e 67 por segmento subsequente. Uma mensagem bilíngue em árabe e inglês, ou um OTP personalizado em árabe, pode ser rapidamente dividido em vários segmentos. Equipas que enviam mensagens para os países do Conselho de Cooperação do Golfo (CCG), Arábia Saudita, Emirados Árabes Unidos e Egito devem orçar cada modelo em árabe em unidades UCS-2 desde o início, e não em GSM-7.

Caracteres comuns que silenciosamente forçam uma mensagem inteira a usar o formato UCS-2:

- Emoji de qualquer tipo, incluindo um único 😀 no final de uma mensagem de marketing.
- Árabe, hebraico, cirílico, grego, chinês e outros alfabetos não latinos.
- Aspas curvas e apóstrofos (’ ‘ “ ) colados de processadores de texto.
- Travessões curtos e longos (– —), reticências (…) e espaço não separável.
- Muitas letras latinas acentuadas que não estão presentes na tabela GSM-7.

## Qual o custo da segmentação?

Cada segmento é avaliado e faturado como uma mensagem separada. Um alerta GSM-7 de 160 caracteres é um SMS faturável; adicione um caractere e ele se torna dois segmentos — até 306 caracteres de capacidade — faturados como dois. Um OTP em árabe de apenas 75 caracteres já corresponde a dois segmentos UCS-2 e, portanto, a duas mensagens, mesmo que pareça curto. Em campanhas e OTPs, a disciplina de codificação é um item essencial, não um detalhe cosmético.

1. Mantenha os modelos transacionais dentro de um único segmento — 160 GSM-7 ou 70 UCS-2 — sempre que a linguagem permitir.
2. Remover Unicode acidental: normalizar aspas curvas, travessões e espaços não separáveis para os seus equivalentes GSM-7 antes do envio.
3. Valide a codificação e a contagem de segmentos no momento da compilação, e não após a fatura, usando um verificador no seu pipeline de envio.
4. Orçamento de modelos árabes e outros não latinos em unidades UCS-2 (70 / 67) desde o início.
5. Remover conteúdo variável — URLs, nomes longos de comerciantes — que podem fazer com que uma mensagem ultrapasse o limite de um segmento em tempo de execução.

> A API de SMS da BroadNet informa a codificação resolvida e a contagem de segmentos em cada mensagem antes do envio e em cada relatório de entrega, permitindo visualizar e controlar a segmentação em produção, em vez de descobri-la apenas na fatura. Detalhes completos de solicitações e respostas estão disponíveis na documentação para desenvolvedores.

## Perguntas frequentes

### Quantos caracteres tem uma mensagem SMS?

Uma mensagem SMS contém 140 bytes de dados. Utilizando o alfabeto padrão GSM-7, que possui 160 caracteres, se o texto contiver algum caractere fora do padrão GSM-7 — um emoji, uma letra acentuada ou arábica, uma aspa curva — a mensagem passa a ser codificada em UCS-2 e comporta 70 caracteres. Textos mais longos são divididos em segmentos concatenados de 153 (GSM-7) ou 67 (UCS-2) caracteres cada.

### Porque a minha mensagem SMS está a ser contabilizada como tendo apenas 70 caracteres?

Como um elemento do texto não faz parte do alfabeto GSM-7, toda a mensagem foi recodificada em UCS-2 de 16 bits, que comporta apenas 70 caracteres. Os culpados mais comuns são emojis, alfabetos não latinos e aspas curvas, travessões ou espaços não separáveis copiados de um processador de texto. Substituindo ou removendo esse caractere, a mensagem regressa ao limite de 160 caracteres do GSM-7.

### O que é a codificação UCS-2 em SMS?

UCS-2 é a codificação Unicode de 16 bits de largura fixa usada pelo SMS quando o texto não pode ser representado no alfabeto GSM-7 de 7 bits. Dois bytes por caractere significam que a carga útil de 140 bytes comporta 70 caracteres numa única mensagem ou 67 por segmento numa mensagem multipart. Qualquer caractere árabe, emoji ou outro caractere não-GSM-7 no corpo da mensagem força a conversão de todo o SMS para UCS-2.

### Porque a minha mensagem foi dividida em duas?

O texto excedeu o limite de mensagem única para a sua codificação — 160 caracteres em GSM-7 ou 70 em UCS-2 — portanto, foi enviado como uma mensagem concatenada (multipart). Cada segmento carrega um cabeçalho de dados do utilizador de 6 bytes para remontagem, reduzindo a capacidade para 153 (GSM-7) ou 67 (UCS-2) caracteres por parte, e cada segmento é cobrado como uma mensagem separada.

## Referências

- 3GPP TS 23.038 — Alfabetos e informações específicas de idioma (alfabeto padrão GSM-7 e UCS-2): [3gpp.org](https://www.3gpp.org/)
- 3GPP TS 23.040 — Implementação técnica do Serviço de Mensagens Curtas (SMS), incluindo o cabeçalho de dados do utilizador: [3gpp.org](https://www.3gpp.org/)
- BroadNet — ferramentas: [calculadora de segmento SMS](https://www.broadnet.me/tools/sms-segment-calculator) e [verificador GSM-7 / Unicode](https://www.broadnet.me/tools/gsm7-unicode-checker).
