BroadNet
Codificação SMSConjuntos de caracteres

O conjunto de caracteres GSM-7

Atualizado em 3 min de leituraBaseado em padrões
Resposta direta

O GSM-7 é o alfabeto predefinido de 7 bits definido na GSM 03.38 (3GPP TS 23.038) para SMS. Codifica 128 caracteres — letras latinas, dígitos, pontuação e alguns caracteres acentuados e gregos — em 7 bits cada. Dez caracteres extra vivem numa tabela de extensão e cada um custa dois septetos. O texto cabe em 160 caracteres por SMS único.

§01

A tabela básica (128 caracteres)

O alfabeto predefinido GSM-7 empacota 128 caracteres em 7 bits cada. Cobre o alfabeto latino maiúsculo, dígitos, pontuação comum, um conjunto de vogais latinas acentuadas, os sinais de secção e de moeda e várias letras gregas maiúsculas usadas como símbolos. Cada caractere aqui custa exatamente um septeto (7 bits).

Alfabeto básico GSM-7 (por grupo)
GrupoCaracteres
Maiúsculas latinasA B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Minúsculas latinasa b c d e f g h i j k l m n o p q r s t u v w x y z
Dígitos0 1 2 3 4 5 6 7 8 9
Pontuação! " # % & ' ( ) * + , - . / : ; < = > ? _
Latim acentuadoà ä å æ è é ì ñ ò ö ø ù ü Ä Å Æ Ç É Ñ Ö Ø Ü ß
Símbolos gregosΔ Φ Γ Λ Ω Π Ψ Σ Θ Ξ
Moeda / símbolos£ $ ¥ ¤ € (ext) § ¡ ¿ @
Espaço em brancoSP (espaço), CR, LF
§02

A tabela de extensão

Dez caracteres não estão na tabela básica. Alcançam-se com um prefixo de escape (0x1B) seguido do código do caractere na tabela de extensão, o que significa que cada um destes custa dois septetos, não um. Incluir qualquer deles numa mensagem reduz a capacidade efetiva de SMS único. Note que o sinal de euro (€) é um deles.

Tabela de extensão GSM-7 — cada um custa 2 septetos
CaractereNome
|Barra vertical
^Caret / acento circunflexo
€Símbolo do euro
{Chave esquerda
}Chave direita
[Colchete esquerdo
]Colchete direito
~Til
\Barra invertida
FFAvanço de página
§03

Empacotamento de 7 bits

Como cada caractere tem 7 bits mas os octetos têm 8 bits, o GSM-7 empacota septetos através das fronteiras de byte. Oito caracteres de 7 bits empacotam-se em sete octetos de 8 bits, pelo que 160 septetos preenchem 140 octetos — o limite de dados de utilizador do SMS. O empacotamento desloca os bits de cada caractere sucessivo para preencher as folgas, e é por isso que uma visão ingénua de um byte por caractere de um SMS GSM-7 parece baralhada.

Empacotamento de septetos — 160 septetos → 140 octetostext
8 characters (56 bits) ────► 7 octets (56 bits)
160 GSM-7 septets       ────► 140 octets (the SMS payload limit)
                              (an extension char = 2 septets)
§04

Tabelas de deslocamento de idioma

A 3GPP TS 23.038 define também tabelas de deslocamento de idioma nacionais (por exemplo turco, espanhol, português) que remapeiam algumas posições da tabela de extensão para letras específicas do idioma. O suporte é irregular entre terminais e redes, pelo que muitos remetentes evitam depender delas e recorrem ao UCS-2 quando uma mensagem precisa de caracteres fora do conjunto básico GSM-7.

Perguntas frequentes

Perguntas frequentes

Quantos caracteres cabem num SMS GSM-7?

160 caracteres num SMS único, porque 160 septetos de 7 bits cada preenchem o limite de 140 octetos de dados de utilizador. As mensagens GSM-7 concatenadas descem para 153 caracteres por segmento para dar espaço ao User Data Header.

Que caracteres contam como dois no GSM-7?

Os dez caracteres da tabela de extensão — | ^ € { } [ ] ~ \ e form-feed — cada um custa dois septetos por precisar de um prefixo de escape. Usar qualquer deles reduz quanto texto cabe num SMS único.

O sinal de euro está no GSM-7?

Sim, mas na tabela de extensão, pelo que custa dois septetos em vez de um. Uma mensagem que contenha € cabe, por isso, em menos caracteres antes de precisar de um segundo segmento.

Porque é que uma mensagem GSM-7 parece baralhada ao nível de byte?

Porque o GSM-7 empacota caracteres de 7 bits através de fronteiras de octeto de 8 bits. Oito caracteres ocupam sete octetos, pelo que ler o conteúdo um byte por caractere dá disparate — é preciso desempacotar os septetos primeiro.

O que acontece se o meu texto tiver um caractere que não está no GSM-7?

A mensagem inteira tem de mudar para codificação UCS-2 (16 bits), o que reduz a capacidade de SMS único de 160 para 70 caracteres. Um único caractere fora do GSM-7 (um emoji, uma aspa curva ou muitas letras não latinas) força isto.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.