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 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.
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 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 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.
- Mantenha os modelos transacionais dentro de um único segmento — 160 GSM-7 ou 70 UCS-2 — sempre que a linguagem permitir.
- Remover Unicode acidental: normalizar aspas curvas, travessões e espaços não separáveis para os seus equivalentes GSM-7 antes do envio.
- 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.
- Orçamento de modelos árabes e outros não latinos em unidades UCS-2 (70 / 67) desde o início.
- 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
- 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
- BroadNet — ferramentas: calculadora de segmento SMS e verificador GSM-7 / Unicode.
