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ísticaGSM-7UCS-2
Bits por caractere7 bits16 bits
Limite por SMS único160 caracteres70 caracteres
Caracteres suportadosAlfabeto latino, números, símbolos básicosQuase todos os caracteres Unicode, incluindo emojis
Uso comumNotificações, códigos de verificação, alertasMensagens com emojis, idiomas não-latinos, marketing
Impacto no custoMenor custo por mensagemMaior 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:

  1. O número de caracteres.
  2. A codificação detectada (GSM-7 ou UCS-2).
  3. 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.