# O data coding scheme (DCS)

> 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.

- URL canônico: https://www.broadnet.me/pt/reference/data-coding-scheme-dcs
- Idioma: pt
- Última atualização: 2026-07-18
- Editor: BroadNet (https://www.broadnet.me)

O byte data-coding scheme que indica à rede como um SMS é codificado: GSM-7 (0x00), 8-bit (0x04), UCS-2 (0x08), mais as classes de mensagem (0/flash a 3/SIM) da GSM 03.38.

## 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.

*Valores comuns de data_coding / DCS*

| 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.

*Estrutura de grupos de codificação do DCS (selecionada)*

| 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.

*Classes de mensagem SMS*

| 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.

## Fontes

- [3GPP TS 23.038 — data coding scheme (§4)](https://www.3gpp.org/dynareport/23038.htm)
- [SMPP v3.4 specification — data_coding](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)

## Relacionados

- [O conjunto de caracteres GSM-7](https://www.broadnet.me/pt/reference/gsm7-character-set)
- [SMS UCS-2 e Unicode](https://www.broadnet.me/pt/reference/ucs2-unicode-sms)
- [Referência submit_sm SMPP](https://www.broadnet.me/pt/reference/smpp-submit-sm)
- [Calculadora de segmentos SMS (ferramenta gratuita)](https://www.broadnet.me/pt/tools/sms-segment-calculator)
- [Produto SMS A2P](https://www.broadnet.me/pt/products/a2p-sms)
