BroadNet
SMS encodingData coding

The data coding scheme (DCS)

Updated 2 min readStandards-based
Direct answer

The data coding scheme (DCS) is a one-octet field — data_coding in SMPP, TP-DCS in GSM — that tells the network how the message body is encoded and, optionally, its message class. The three values that matter are 0x00 (GSM-7 default), 0x04 (8-bit binary) and 0x08 (UCS-2/Unicode). Higher coding groups add message-class and flash behaviour.

§01

The three values you use daily

For almost all A2P text traffic, the DCS is one of three values. 0x00 selects the GSM-7 default alphabet. 0x04 selects 8-bit binary (used for OTA, WAP push and other data payloads, not human text). 0x08 selects UCS-2 for Unicode. Setting the wrong value causes mojibake and mis-segmentation, so it must match how you actually encoded short_message.

Common data_coding / DCS values
ValueEncodingUse
0x00GSM-7 default alphabetStandard Latin text SMS
0x01IA5 / ASCIIRarely used
0x03Latin-1 (ISO-8859-1)Some Western-European routes
0x048-bit binaryBinary / OTA / WAP push payloads
0x08UCS-2 (UTF-16BE)Unicode / non-Latin / emoji
§02

The GSM 03.38 coding groups

The DCS octet is not a flat enumeration — its high nibble selects a coding group that reinterprets the low bits. The general data-coding group (0x0X) carries an alphabet indicator (bits 3-2: 00 = GSM-7, 01 = 8-bit, 10 = UCS-2) and an optional compression and class flag. The data-coding/message-class group (0xFX) is used for immediate-display 'flash' messages.

DCS coding-group structure (selected)
High nibbleGroupLow bits meaning
0x0XGeneral data codingAlphabet (GSM-7/8-bit/UCS-2), compression, class flag
0x1XGeneral, class presentAs above with message class in bits 1-0
0xCXMessage waiting — discardVoicemail/indicator groups
0xDX / 0xEXMessage waiting — storeGSM-7 / UCS-2 indicator groups
0xFXData coding / message classAlphabet in bit 2, class in bits 1-0 (flash = class 0)
§03

Message classes

When the DCS indicates a message class, bits 1-0 select where the message lands. Class 0 is a 'flash' SMS shown immediately on screen without being stored. Class 1 targets the handset (ME), class 2 the SIM (SIM Toolkit / OTA), and class 3 external terminal equipment. Most A2P text carries no class; flash (class 0, e.g. DCS 0xF0 for GSM-7) is used for alerts that must appear instantly.

SMS message classes
ClassDestinationBehaviour
Class 0ScreenFlash — displayed immediately, not auto-stored
Class 1Mobile equipment (ME)Stored in handset memory
Class 2SIMSIM Toolkit / OTA provisioning
Class 3Terminal equipment (TE)Forwarded to external equipment
FAQ

Frequently asked

What is the data coding scheme in SMS?

It is a one-octet field (data_coding in SMPP, TP-DCS in GSM) that tells the network how the message body is encoded — GSM-7, 8-bit or UCS-2 — and optionally its message class. It must match how the payload was actually encoded.

What data_coding value do I use for GSM-7 vs Unicode?

Use 0x00 for GSM-7 default-alphabet text and 0x08 for UCS-2 Unicode. Use 0x04 only for 8-bit binary payloads like OTA or WAP push, never for human-readable text.

What is a flash SMS?

A flash SMS is a class 0 message that appears immediately on the recipient's screen without being saved to the inbox. It is set via the message-class bits of the DCS (for example 0xF0 for GSM-7 flash).

Why did my message arrive as garbled characters?

Almost always a DCS mismatch: the data_coding value did not match the actual encoding of short_message. For example, sending UTF-16 bytes with data_coding 0x00 (GSM-7) produces mojibake. Set data_coding to match the bytes you send.

References

Source specifications

The published standards this page is grounded in. Opens in a new tab.

BNMaintained by the BroadNet engineering team·Carrier-grade messaging since 2003
Put it on the wire

Build with a real SMPP bind and REST API.

Request test access with real test keys: send to your own verified number first, then move to production across 200+ countries once your sender identity and routes are approved.