Na telefonia móvel, GSM 03.38 ou 3GPP 23.038 é uma codificação de caracteres usada em redes GSM para SMS (Short Message Service), CB ( Cell Broadcast ) e USSD (Unstructured Supplementary Service Data). O padrão 3GPP TS 23.038 (originalmente recomendação GSM 03.38) define o alfabeto padrão GSM de 7 bits que é obrigatório para aparelhos GSM e elementos de rede, mas o conjunto de caracteres é adequado apenas para inglês e vários idiomas da Europa Ocidental. Idiomas como chinês, coreano ou japonês devem ser transferidos usando a codificação de caracteres UCS-2 de 16 bits . Um número limitado de idiomas, como português , espanhol , turco e vários idiomas usados na Índia escritos com scripts Brahmic podem usar a codificação de 7 bits com a tabela de mudança de idioma nacional definida no 3GPP 23.038. Para mensagens binárias , a codificação de 8 bits é usada.
Alfabeto padrão GSM de 7 bits e tabela de extensão de 3GPP TS 23.038 / GSM 03.38
A codificação padrão para mensagens GSM é o alfabeto padrão de 7 bits, conforme definido na recomendação 23.038.
Os caracteres de sete bits devem ser codificados em octetos seguindo um dos três modos de empacotamento:
- CBS: com essa codificação, é possível enviar até 93 caracteres (compactados em até 82 octetos) em uma mensagem SMS em um Serviço de Cell Broadcast.
- SMS: com esta codificação é possível enviar até 160 caracteres (compactados em até 140 octetos) em uma mensagem SMS na rede GSM.
- USSD: usando esta codificação, é possível enviar até 182 caracteres (compactados em até 160 octetos) em uma mensagem SMS de Dados de Serviço Suplementar Não Estruturado.
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um Escape para a tabela de extensão (mapeia para NBSP).
-
SP é um personagem do Espaço.
|
Extensão do conjunto de caracteres básico
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
|
|
|
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
|
€ |
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
|
|
|
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
|
|
} |
|
|
|
|
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
|
|
|
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
É importante (especialmente quando uma mensagem deve ser segmentada usando um mecanismo SMS concatenado ) que os caracteres da tabela Conjunto de caracteres básicos tenham um septeto, os caracteres da tabela Extensão do conjunto de caracteres básicos tomem dois septetos.
Observe que a segunda parte da tabela só está acessível se o dispositivo GSM suportar o mecanismo de extensão de 7 bits, usando o prefixo do caractere ESC. Caso contrário, o próprio código ESC é interpretado como um espaço e o caractere a seguir será tratado como se não houvesse nenhum código ESC inicial.
A maior parte da parte alta da tabela não é usada no conjunto de caracteres padrão, mas o padrão GSM define alguns indicadores de código de idioma que permitem ao sistema identificar variantes nacionais desta parte, para suportar mais caracteres do que aqueles exibidos na tabela acima.
Em uma mensagem de texto GSM padrão, todos os caracteres são codificados usando unidades de código de 7 bits, agrupados para preencher todos os bits de octetos. Assim, por exemplo, o envelope de 140 octetos de um SMS , sem outro indicador de idioma, mas apenas o prefixo de classe padrão, pode transportar até (140 * 8) / 7 = 160, ou seja, 160 caracteres GSM de 7 bits (mas observe que o código ESC conta para um deles, se forem usados caracteres na parte superior da tabela).
Mensagens mais longas podem ser enviadas, mas exigirão um prefixo de continuação e um número de sequência nas mensagens SMS subsequentes (esses bytes de prefixo e o número de sequência são contados dentro do comprimento máximo da carga útil de 140 octetos do formato do envelope).
Quando há 1 a 6 bits sobressalentes no último octeto de uma mensagem, esses bits são definidos como zero (esses bits não contam como um caractere, mas apenas como um preenchimento). Quando há 7 bits sobressalentes no último octeto de uma mensagem, esses bits são configurados para o código de 7 bits do controle CR (também usado como preenchimento de preenchimento) em vez de serem configurados para zero (onde seriam confundidos com o Código de 7 bits de um caractere '@').
Essa codificação de 7 bits permite o transporte de textos codificados no subconjunto Latim básico do ASCII, bem como alguns caracteres do conjunto de caracteres ISO Latin 1. Também permite a codificação de textos escritos na escrita grega, mas apenas em maiúsculas; para tal uso em grego, as letras latinas maiúsculas que se parecem com as letras gregas são reutilizadas com o mesmo código, de modo que o conjunto de caracteres acima é completo apenas para o grego monotônico moderno restrito a letras maiúsculas. Um suporte completo para o alfabeto grego (incluindo letras minúsculas) requer uma versão nacional da tabela deslocada de 7 bits (usando o código ESC para cada caractere nacional codificado nesta tabela deslocada), ou uma codificação proprietária não especificada de 8 bits, ou a uso da codificação UCS-2 (veja abaixo).
Observe que o código especial marcado com SS2 na tabela acima também foi atribuído (e codificado como 0x1B, 0x1B) para permitir o uso de outra tabela de deslocamento alternativa de 7 bits. Mas esse mecanismo nunca foi usado e a codificação UCS-2 foi preferida.
Observe que o caractere 0x09 ( Ç , C maiúsculo com cedilha) deve ser substituído por ç (c minúsculo com cedilha) na implementação moderna, como recomendado pelo Unicode, uma vez que a versão em maiúsculas é de pouca utilidade.
Codificação de dados GSM de 8 bits
O modo de codificação de dados de 8 bits trata as informações como dados brutos. De acordo com o padrão, o alfabeto para esta codificação é específico do usuário.
Codificação UCS-2
Essa codificação permite o uso de uma gama maior de caracteres e idiomas. UCS-2 pode representar os caracteres latinos e orientais mais comumente usados ao custo de um gasto de espaço maior. Estritamente falando, UCS-2 é limitado a caracteres no Plano Multilíngue Básico . No entanto, como os ambientes de programação modernos não fornecem codificadores ou decodificadores para UCS-2, alguns telefones celulares (por exemplo, iPhones ) usam UTF-16 em vez de UCS-2. Isso funciona porque, para caracteres no Plano multilíngue básico (incluindo alfabetos completos da maioria das línguas humanas modernas), as codificações UCS-2 e UTF-16 são idênticas. Para codificar caracteres fora do BMP (inacessível no UCS-2 simples), como Emoji , o UTF-16 usa pares substitutos , que quando decodificados com UCS-2 apareceriam como dois pontos de código válidos, mas não mapeados .
Uma única mensagem SMS GSM usando essa codificação pode ter no máximo 70 caracteres (140 octetos).
Observe que em muitos telefones celulares GSM, não há pré-seleção específica da codificação UCS-2. O padrão é usar a codificação de 7 bits descrita acima, até que se insira um caractere que não está presente na tabela GSM de 7 bits (por exemplo, 'a' minúsculo com agudo: 'á'). Nesse caso, toda a mensagem é recodificada usando a codificação UCS-2, e o comprimento máximo da mensagem enviada em um único SMS é imediatamente reduzido para 70 caracteres, em vez de 160. Outros variam com base na escolha e configuração do aplicativo SMS e o comprimento da mensagem.
Para evitar custos inesperados para remetentes que possuem uma assinatura para um pacote limitado de SMS enviados, os aplicativos devem exibir o número de caracteres usados e o número máximo de caracteres no SMS composto. Quando uma mensagem ultrapassa este máximo, a mensagem será enviada como vários SMS sucessivos contendo partes da mensagem (cada um contendo um número de sequência, que também usa alguns caracteres iniciais em cada parte); essas partes devem ser remontadas posteriormente pelo destinatário.
Alguns aplicativos alertam o usuário quando uma mensagem precisa ser dividida ou até mesmo enviam uma mensagem mais longa como mensagem multimídia (MMS).
Tabelas de mudança de idioma nacional
Desde a versão 8 do padrão 3GPP 23.038 de março de 2008, conjuntos de caracteres adicionais podem ser acessados por meio do uso de Tabelas de Mudança de Idioma Nacional.
Essas tabelas permitem o uso de diferentes conjuntos de caracteres de acordo com o idioma em que o texto será escrito. A escolha da tabela para uma determinada mensagem é selecionada na seção Cabeçalho de Dados do Usuário de uma mensagem SMS e pode ser especificada para todo o texto (uma tabela de bloqueio de deslocamento substituindo a tabela do alfabeto padrão GSM de 7 bits padrão) ou um único caractere ( deslocamento único substituindo a tabela de extensão alfabética padrão do GSM de 7 bits). As tabelas de bloqueio e de turno único juntas na mesma mensagem são possíveis, se a tabela do alfabeto padrão padrão e a tabela de extensão do alfabeto padrão forem substituídas.
Usando uma tabela de deslocamento, uma mensagem ainda pode usar a codificação de 7 bits para os caracteres, mas um conjunto diferente pode ser escolhido para mostrar corretamente os caracteres acentuados e específicos do idioma. Isso permite até 155 caracteres, codificados em 136 octetos (140 octetos, menos os 4 octetos do Cabeçalho de Dados do Usuário necessários para indicar o uso de uma tabela de deslocamento e o código de idioma). Com as tabelas Locking e Single shift, são permitidos até 152 caracteres, codificados em 133 octetos (140 octetos, menos 7 octetos Cabeçalho de Dados do Usuário ).
Os caracteres de qualquer tabela de deslocamento de bloqueio levam um septeto, os caracteres da tabela de deslocamento único (ou tabela de Extensão de Conjunto de Caracteres Básica) levam dois septetos.
Inicialmente, as tabelas de deslocamento apenas para turco foram especificadas; O espanhol e o português foram adicionados em revisões posteriores da versão 8. A versão 9 introduziu 10 idiomas usados na Índia escritos com scripts brâmanes (bengali, gujarati, hindi, canarês, malaiala, oriya, punjabi, tâmil, télugo) e urdu .
Ainda não há uma tabela de mudança de idioma nacional definida para francês, grego, russo, búlgaro, árabe, hebraico e a maioria dos idiomas da Europa Central que precisam de uma cobertura melhor do que o conjunto de caracteres padrão de 7 bits padrão e seu conjunto de caracteres de extensão de 7 bits padrão: se algum caractere for composto que não possa ser representado nesses conjuntos padrão de GSM de 7 bits, a mensagem será automaticamente recodificada usando UCS-2, com o efeito de dividir por mais de dois o comprimento máximo em caracteres de mensagens que podem ser enviadas ao preço de um único SMS (quando uma mensagem é dividida em várias partes, alguns outros octetos são necessários no cabeçalho de dados do usuário para indicar o número de sequência de cada parte).
Embora uma revisão do GSM 03.38 (já na versão 4.0.1 de setembro de 1994) tenha definido valores de esquema de codificação de dados para Cell Broadcast System (CBS) para alemão, inglês, italiano, francês, espanhol, holandês, sueco, dinamarquês, finlandês , Norueguês, grego e turco; com húngaro, polonês, tcheco, hebraico, árabe, russo e islandês adicionados em revisões posteriores, nenhuma tabela de codificação foi definida para esses idiomas. O objetivo deste campo era puramente identificar o idioma da mensagem.
Também não há tabela de mudança de idioma para japonês escrito em kanas básico, ou para coreano escrito em Hangul jamos, ou para chinês escrito em han. Isso geralmente não é um problema no Japão, porque ele usa outros padrões além de GSM e WAP para mensagens. Os dois outros idiomas também têm muitos caracteres distintos para caber em uma tabela de deslocamento de 7 bits.
Língua espanhola (escrita latina)
Não há nenhum conjunto de caracteres de deslocamento de bloqueio específico para o idioma espanhol. Usa o conjunto de caracteres básico padrão.
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
Conjunto de caracteres de deslocamento único para o idioma espanhol UDH contém 0x24 0x01 0x02
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
UMA |
|
uma |
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
VOCÊ |
€ |
você
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
|
|
|
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
ç |
|
} |
|
EU |
|
eu |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
Ó |
|
ó |
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua portuguesa (escrita latina)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
Conjunto de caracteres de deslocamento único para o idioma português UDH contém 0x24 0x01 0x03
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
UMA |
|
UMA |
|
0x02
|
|
Φ |
|
|
|
|
|
|
0x03
|
|
Γ |
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
ê |
Ω |
|
|
|
VOCÊ |
€ |
você
|
0x06
|
|
Π |
|
|
|
|
|
|
0x07
|
|
Ψ |
|
|
|
|
|
|
0x08
|
|
Σ |
{ |
|
|
|
|
|
0x09
|
ç |
Θ |
} |
|
EU |
|
eu |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
Ô |
SS2 |
|
|
|
UMA |
|
uma
|
0x0C
|
ô |
|
|
[ |
|
Õ |
|
õ
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
UMA |
|
|
] |
|
|
|
|
0x0F
|
uma |
Ê |
\ |
|
Ó |
|
ó |
uma
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua turca (escrita latina)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
Conjunto de caracteres de deslocamento único para o idioma turco UDH contém 0x24 0x01 0x01
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
|
|
|
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
Ş |
ç |
ş
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
|
€ |
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
Ğ |
|
ğ |
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
|
|
} |
|
EU |
|
eu |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
|
|
|
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua urdu (escrita árabe e latina básica)
Também pode ser usado para a língua Sindi, também escrita na escrita árabe.
Às vezes, pode ser usado para o idioma árabe também, mas os dígitos orientais (codificados aqui em sua variante persa-hindu) não serão usados nesse caso porque o árabe padrão prefere seus dígitos árabes orientais tradicionais e frequentemente serão substituídos por ocidentais Dígitos árabes (codificados no caractere de deslocamento de bloqueio definido na coluna 0x30) que também são usados agora com frequência em Urdu. No entanto, na Índia, os telefones que reconhecem a indicação do idioma árabe podem substituir as variantes persa-hindu dos dígitos árabes orientais pelos dígitos árabes orientais tradicionais.
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua hindi (devanágari e scripts latinos básicos)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Línguas bengali e assamês (scripts bengali e latinos básicos)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Idioma punjabi (gurmukhī e scripts latinos básicos)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua gujarati (gujarati e scripts latinos básicos)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua oriá (oriá e escrita latina básica)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua tâmil (escritas tâmil e latinas básicas)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua telugu (escritas telugu e latinas básicas)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua canarim (kannada e scripts latinos básicos)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Língua malaiala (escrita malaiala e latim básico)
-
LF é um controle de alimentação de linha.
-
CR é um controle de retorno de carro ou preenchimento.
-
ESC é um controle Escape.
-
SP é um personagem do Espaço.
|
-
FF é um controle de quebra de página. Se não for reconhecido, deve ser tratado como LF .
-
CR2 é um personagem de controle. Nenhum caractere específico do idioma deve ser codificado nesta posição.
-
SS2 é um segundo controle de Escape de Turno Único reservado para extensões futuras.
|
Veja também
Referências
links externos