Se você já se perguntou por que uma mensagem de texto às vezes tem um limite de 160 caracteres e, outras vezes, apenas 70, a resposta está na forma como os caracteres são codificados. Os dois sistemas por trás disso são o GSM-7 e o UCS-2.
Entender a diferença entre eles é fundamental para qualquer pessoa que trabalhe com envio de SMS, seja para otimizar custos, garantir a entrega correta da mensagem ou simplesmente compreender a tecnologia por trás de uma das formas de comunicação mais robustas que existem.
O que é GSM-7? O padrão da telefonia móvel
GSM-7, também conhecido como Alfabeto Padrão GSM, é o conjunto de caracteres padrão usado na grande maioria das mensagens SMS. O nome vem de "Global System for Mobile Communications", e o "7" indica que cada caractere é representado por 7 bits de dados.
Este conjunto inclui as letras maiúsculas e minúsculas do alfabeto latino (A-Z, a-z), números (0-9) e os símbolos de pontuação mais comuns, além de alguns caracteres gregos. A eficiência do GSM-7 é sua principal vantagem: por usar apenas 7 bits por caractere, ele permite que uma única mensagem SMS contenha até 160 caracteres.
Isso é calculado com base no tamanho máximo de dados de um SMS, que é de 1120 bits (ou 140 bytes). A conta é simples:
1120 bits / 7 bits por caractere = 160 caracteres
O GSM-7 foi projetado para ser compacto e cobrir as necessidades de comunicação da maioria dos idiomas ocidentais, tornando-se o padrão para mensagens de texto em todo o mundo.
A tabela de caracteres GSM-7
O conjunto básico GSM-7 inclui os seguintes caracteres:
- Letras: A-Z, a-z
- Números: 0-9
- Símbolos comuns: @, $, !, ?, ., ,, :, ;, -, _, +, =, %, &, *, #, '
- Caracteres de controle: Espaço, nova linha (line feed), retorno de carro (carriage return)
- Letras gregas: Δ, Φ, Γ, Λ, Ω, Π, Ψ, Σ, Θ, Ξ
Além disso, existe uma tabela de extensão que permite o uso de caracteres adicionais, como €, [, ], ~, |, e ^. No entanto, cada um desses caracteres de extensão ocupa o espaço de dois caracteres normais, pois exige um caractere de "escape" para ser representado.
O que é UCS-2? O padrão para caracteres especiais
UCS-2 (2-byte Universal Character Set) é um padrão de codificação de caracteres que faz parte do Unicode. Ele foi criado para resolver a principal limitação do GSM-7: a incapacidade de representar caracteres de idiomas não-latinos (como árabe, chinês, russo) e símbolos complexos, como emojis.
Enquanto o GSM-7 usa 7 bits, o UCS-2 usa 16 bits (ou 2 bytes) para representar cada caractere. Isso permite um repertório muito maior de símbolos possíveis, cobrindo praticamente todos os sistemas de escrita do mundo.
Com 16 bits por caractere, o cálculo do limite de caracteres muda:
1120 bits / 16 bits por caractere = 70 caracteres
É por isso que, ao adicionar um simples emoji (👍) ou um acento fora do padrão (como â ou ç em algumas implementações), sua mensagem que antes caberia em 160 caracteres passa a ter um limite de apenas 70.
GSM-7 vs. UCS-2: A principal diferença na prática
Para visualizar as diferenças de forma clara, a tabela abaixo resume os pontos mais importantes para quem envia ou recebe SMS.
| Característica | GSM-7 | UCS-2 |
|---|---|---|
| Bits por caractere | 7 bits | 16 bits |
| Limite por SMS único | 160 caracteres | 70 caracteres |
| Caracteres suportados | Alfabeto latino, números, símbolos básicos | Quase todos os caracteres Unicode, incluindo emojis |
| Uso comum | Notificações, códigos de verificação, alertas | Mensagens com emojis, idiomas não-latinos, marketing |
| Impacto no custo | Menor custo por mensagem | Maior custo (uma mensagem pode ser dividida em várias) |
Como a codificação afeta o limite de caracteres?
A mudança de codificação de GSM-7 para UCS-2 é automática e acontece no momento em que a mensagem é processada pela operadora ou pela plataforma de envio. O sistema analisa todos os caracteres da sua mensagem. Se todos pertencerem ao alfabeto GSM-7, ela será enviada como tal.
Se um único caractere fora desse padrão for detectado - um ã, ç, à ou qualquer emoji - o sistema "promove" a mensagem inteira para UCS-2. A partir daí, cada caractere passa a consumir 16 bits, e o limite total cai para 70.
Quando uma mensagem excede o limite (seja 160 ou 70), ela é dividida em partes. Isso é conhecido como SMS concatenado. Cada parte é tarifada como uma mensagem individual, embora chegue ao destinatário como uma única mensagem longa. A concatenação também consome alguns caracteres para metadados, reduzindo ainda mais o espaço útil por parte.
O impacto no custo do envio de SMS
O impacto financeiro é a consequência mais direta da escolha da codificação. Imagine que você precisa enviar a seguinte mensagem de marketing:
"Promoção imperdível! Use o cupom PROMO10 e ganhe 10% de desconto. Válido até amanhã!"
Essa mensagem tem 94 caracteres. Como todos eles pertencem ao conjunto GSM-7, ela será enviada como um único SMS, com custo de uma unidade.
Agora, vamos adicionar um emoji para torná-la mais atrativa:
"Promoção imperdível! 👍 Use o cupom PROMO10 e ganhe 10% de desconto. Válido até amanhã!"
Com 96 caracteres, a mensagem ainda parece curta. No entanto, a presença do emoji 👍 força a codificação para UCS-2. O limite passa a ser 70 caracteres. Como 96 é maior que 70, a mensagem será dividida em duas partes (um SMS concatenado). O custo do envio, portanto, dobra.
Para plataformas que enviam SMS A2P (Application-to-Person) em grande volume, a atenção à codificação é essencial para o controle de custos.
Como saber qual codificação está sendo usada?
Muitas plataformas de envio de SMS, incluindo APIs para desenvolvedores, oferecem ferramentas para analisar o conteúdo da mensagem antes do envio. Elas geralmente indicam:
- O número de caracteres.
- A codificação detectada (GSM-7 ou UCS-2).
- O número de partes em que a mensagem será dividida.
Se você não tem acesso a uma ferramenta assim, a regra prática é revisar sua mensagem em busca de caracteres suspeitos. Acentuação comum em português, como á, é, í, ó, ú, faz parte do GSM-7. No entanto, à, ã, õ, â, ê, î, ô, û e ç podem, dependendo da implementação da operadora, forçar a conversão para UCS-2.
Perguntas frequentes
Por que meu SMS com 80 caracteres foi cobrado como dois?
Provavelmente sua mensagem continha um caractere que não pertence ao conjunto GSM-7 (como um emoji ou um acento como ç). Isso forçou a codificação para UCS-2, cujo limite é de 70 caracteres por SMS. Como 80 é maior que 70, a mensagem foi dividida em duas partes e cobrada como tal.
Emojis usam qual codificação de SMS?
Todos os emojis forçam o uso da codificação UCS-2. Um único emoji em uma mensagem de texto longa pode ser suficiente para dobrar ou triplicar o custo de envio, pois reduz o limite de caracteres por parte de 160 para 70.
O caractere ç sempre muda a codificação para UCS-2?
Não sempre, mas frequentemente. Embora o ç (cedilha) seja comum em português, ele não faz parte do conjunto básico GSM-7. Algumas operadoras e gateways de SMS o mapeiam para o caractere c automaticamente, mas a prática mais segura é assumir que ele forçará a codificação UCS-2 para garantir compatibilidade universal. Para evitar surpresas, o ideal é substituí-lo por c.
Como posso enviar uma mensagem em árabe ou chinês?
Para enviar mensagens em idiomas que não usam o alfabeto latino, o uso da codificação UCS-2 é obrigatório. Não há como usar GSM-7 para esses casos. Esteja ciente de que o limite será de 70 caracteres por SMS.
É possível forçar o uso de GSM-7 em uma API de SMS?
Muitas APIs permitem definir um parâmetro para "sanitizar" a mensagem, ou seja, substituir automaticamente caracteres não-GSM por equivalentes. Por exemplo, substituir é por e ou remover emojis. Isso pode ser útil para garantir que suas mensagens, especialmente as transacionais como códigos OTP, nunca excedam o custo de um único SMS.



