Contador de caracteres SMS: a armadilha do GSM-7 e do UCS-2
Você envia uma campanha SMS de 150 caracteres. Fatura 3 SMS por destinatário em vez de 1. Seu orçamento de marketing evapora e ninguém avisou. O culpado quase sempre é o mesmo: um único caractere que não encaixa no alfabeto GSM e força uma mudança de codificação que corta o limite pela metade.
Aqui está a realidade sem rodeios.
A dura realidade do GSM 7-bit
O SMS padrão não usa UTF-8. Usa o GSM 03.38, um alfabeto de 7 bits herdado da telefonia dos anos 80. Com 7 bits por símbolo, um único SMS transporta 160 caracteres. É o número que todo mundo cita e quase ninguém entende.
O alfabeto GSM 7-bit cobre as letras latinas básicas (A–Z), os dígitos, alguma pontuação e um punhado de símbolos e acentos selecionados: @, £, $, ¥, ¡, ¿, è, é, ù, ì, ò, à, ñ, ç, ä, ö, ü, Å, æ, ß. Mas, criticamente, não inclui o á, o â, o ã, o ê, o í, o ó, o ô, o õ e o ú — todos comuns em português — nem as aspas tipográficas, nem os travessões longos, nem, claro, nenhum emoji. (Curiosamente, é, à e ç fazem parte do alfabeto básico.)
Existe ainda uma pequena tabela de extensão (acessada com um prefixo ESC) para €, ^, {, }, \, [, ~, ] e |. Esses caracteres não forçam UCS-2, mas cada um consome 2 slots (ESC + símbolo), então cada aparição encurta o seu limite de 160.
Assim que um único caractere cai fora do alfabeto básico e da tabela de extensão, o sistema SMS muda toda a codificação da mensagem para UCS-2 (UTF-16). Essa mudança não é parcial: vale para a mensagem inteira.
A armadilha do emoji (e do "ã")
O UCS-2 usa 16 bits por caractere. O limite por SMS despenca de 160 para 70 caracteres. E como a mudança vale para a mensagem inteira, não basta tirar o emoji: se o ã de "não" está lá, todo o SMS viaja em UCS-2. Para quem faz marketing em português, isso dói mais do que em outros idiomas, porque "não" é uma das palavras mais frequentes da língua.
Veja o custo real:
| Mensagem | Caracteres | Codificação | SMS consumidos | Custo relativo |
|---|---|---|---|---|
Venha hoje! | 11 | GSM-7 (160 máx) | 1 | 1× |
Venha, não! | 11 | UCS-2 (70 máx, o ã força) | 1 | 1× (limite bem menor) |
| Promo de 140 caracteres com um emoji | 140 | UCS-2 | 2 (140 > 70) | 2× |
| O mesmo texto de 140 sem emoji nem acentos proibidos | 140 | GSM-7 | 1 (140 < 160) | 1× |
Um emoji solitário — ou um único ã — pode dobrar o custo de um envio em massa. Numa campanha para 100.000 contatos, a diferença entre GSM-7 e UCS-2 não é um matiz técnico: é o dobro da fatura.
Concatenação: o detalhe que multiplica o gasto
Mensagens longas são divididas em segmentos. Para encaixá-las e reconstruí-las no receptor, cada segmento carrega um cabeçalho de usuário (UDH) que rouba espaço:
| Codificação | Limite no SMS simples | Limite por segmento (concatenado) |
|---|---|---|
| GSM-7 | 160 | 153 |
| UCS-2 | 70 | 67 |
Assim, uma mensagem de 160 caracteres em GSM-7 cabe em um SMS. Mas 160 caracteres em UCS-2 exigem 3 segmentos (160 ÷ 67 = 2,39 → 3), porque cada segmento transporta só 67. Três SMS por mensagem. E se seu provedor cobra por segmento, você já está pagando o triplo.
Tabela comparativa de codificações
| Codificação | Limite base | Consequência de exceder | Caracteres seguros | Caracteres inseguros (forçam UCS-2) |
|---|---|---|---|---|
| GSM 7-bit | 160 (153 concatenado) | Divide em segmentos de 153 | A–Z, 0–9, espaço, @, £, $, ¥, ¡, ¿, è, é, ù, ì, ò, à, ñ, ç, ä, ö, ü, ?, !, ., , | á, â, ã, ê, í, ó, ô, õ, ú, Á, Ã, Õ, aspas tipográficas, travessão —, emojis, outros alfabetos |
| UCS-2 / UTF-16 | 70 (67 concatenado) | Divide em segmentos de 67; custo 2–3× | Tudo do GSM-7 + qualquer caractere Unicode | Nenhum (já é o "pior caso") |
Caracteres de extensão (não forçam UCS-2, mas custam o dobro):
€,^,{,},\,[,~,],|são enviados em GSM-7 por meio de um prefixo ESC, então cada um consome 2 slots do seu limite de 160. O euro€está aqui, não no alfabeto básico: um texto com vários€acaba sem espaço antes do que você espera.
Como proteger seu orçamento
- Conte antes de enviar. Use o contador de caracteres para medir o texto exato que vai no SMS.
- Retire acentos para manter o GSM-7. Em português isso dói mais do que no espanhol, porque o
ãaparece em palavras onipresentes: "não" → "nao", "promoção" → "promocao", "você" → "voce". É uma escolha de estilo, não de clareza: o leitor entende. Para campanhas de volume, a economia compensa. - Evite emojis no corpo do SMS. Se precisar deles para branding, ponha no link de destino ou no RCS, não no SMS puro.
- Revise aspas e travessões. Aspas tipográficas e o travessão
—(colados de editores que "autocorrigem") são uma causa frequente e invisível de mudança para UCS-2. Use sempre"retas e-hífen simples. - Cuidado com os símbolos de extensão. Cada
€ou^conta em dobro: dez euros numa mensagem tiram 10 slots a mais. - Verifique com seu provedor. Alguns agregadores informam a contagem de segmentos antes do envio. Peça e confira com seus 153/67.
Meça o texto exato da sua campanha antes de enviar e evite cobrança surpresa por segmento.
Abrir contador de caracteresA regra de ouro: uma mensagem que cabe em 160 caracteres com GSM-7 pode virar 3 SMS com um único emoji ou um único ã. Meça, substitua os caracteres inseguros e valide com o contador de caracteres antes de apertar enviar. Seu orçamento de campanha agradece.