O data coding scheme (DCS) é um campo de um octeto — data_coding no SMPP, TP-DCS no GSM — que indica à rede como o corpo da mensagem está codificado e, opcionalmente, a sua classe de mensagem. Os três valores que importam são 0x00 (predefinição GSM-7), 0x04 (binário de 8 bits) e 0x08 (UCS-2/Unicode). Grupos de codificação superiores acrescentam comportamento de classe de mensagem e flash.
Os três valores que usa diariamente
Para quase todo o tráfego de texto A2P, o DCS é um de três valores. 0x00 seleciona o alfabeto predefinido GSM-7. 0x04 seleciona binário de 8 bits (usado para OTA, WAP push e outros conteúdos de dados, não texto humano). 0x08 seleciona UCS-2 para Unicode. Definir o valor errado causa mojibake e má segmentação, por isso tem de corresponder a como codificou realmente o short_message.
| Valor | Codificação | Usar |
|---|---|---|
| 0x00 | Alfabeto padrão GSM-7 | SMS padrão com texto em alfabeto latino |
| 0x01 | IA5 / ASCII | Raramente usado |
| 0x03 | Latin-1 (ISO-8859-1) | Algumas rotas da Europa Ocidental |
| 0x04 | Binário de 8 bits | Payloads binários / OTA / WAP push |
| 0x08 | UCS-2 (UTF-16BE) | Unicode / não latino / emoji |
Os grupos de codificação da GSM 03.38
O octeto DCS não é uma enumeração plana — o seu nibble superior seleciona um grupo de codificação que reinterpreta os bits inferiores. O grupo de codificação de dados geral (0x0X) transporta um indicador de alfabeto (bits 3-2: 00 = GSM-7, 01 = 8-bit, 10 = UCS-2) e uma flag opcional de compressão e classe. O grupo data-coding/classe de mensagem (0xFX) é usado para mensagens 'flash' de exibição imediata.
| Nibble alto | Grupo | Significado de bits baixos |
|---|---|---|
| 0x0X | Codificação geral de dados | Alfabeto (GSM-7/8 bits/UCS-2), compressão, flag de classe |
| 0x1X | Geral, classe presente | Como acima, com a classe de mensagem nos bits 1-0 |
| 0xCX | Mensagem em espera — descartar | Grupos de correio de voz/indicadores |
| 0xDX / 0xEX | Mensagem em espera — armazenar | Grupos de indicadores GSM-7 / UCS-2 |
| 0xFX | Codificação de dados / classe de mensagem | Alfabeto no bit 2, classe nos bits 1-0 (flash = classe 0) |
Classes de mensagem
Quando o DCS indica uma classe de mensagem, os bits 1-0 selecionam onde a mensagem aterra. A classe 0 é um SMS 'flash' mostrado imediatamente no ecrã sem ser armazenado. A classe 1 dirige-se ao terminal (ME), a classe 2 ao SIM (SIM Toolkit / OTA) e a classe 3 a equipamento terminal externo. A maior parte do texto A2P não transporta classe; o flash (classe 0, por exemplo DCS 0xF0 para GSM-7) é usado para alertas que têm de aparecer instantaneamente.
| Classe | Destino | Comportamento |
|---|---|---|
| Class 0 | Ecrã | Flash — exibido imediatamente, não armazenado automaticamente |
| Class 1 | Equipamento móvel (ME) | Armazenado na memória do aparelho |
| Class 2 | SIM | SIM Toolkit / aprovisionamento OTA |
| Class 3 | Equipamento terminal (TE) | Encaminhado para equipamento externo |
Perguntas frequentes
O que é o data coding scheme no SMS?
É um campo de um octeto (data_coding no SMPP, TP-DCS no GSM) que indica à rede como o corpo da mensagem está codificado — GSM-7, 8-bit ou UCS-2 — e opcionalmente a sua classe de mensagem. Tem de corresponder a como o conteúdo foi realmente codificado.
Que valor de data_coding uso para GSM-7 vs Unicode?
Use 0x00 para texto no alfabeto predefinido GSM-7 e 0x08 para UCS-2 Unicode. Use 0x04 apenas para conteúdos binários de 8 bits como OTA ou WAP push, nunca para texto legível por humanos.
O que é um SMS flash?
Um SMS flash é uma mensagem de classe 0 que aparece imediatamente no ecrã do destinatário sem ser guardada na caixa de entrada. É definido através dos bits de classe de mensagem do DCS (por exemplo 0xF0 para flash GSM-7).
Porque é que a minha mensagem chegou com caracteres ilegíveis?
Quase sempre uma incompatibilidade de DCS: o valor de data_coding não correspondeu à codificação real do short_message. Por exemplo, enviar bytes UTF-16 com data_coding 0x00 (GSM-7) produz mojibake. Defina o data_coding para corresponder aos bytes que envia.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.