Skip to content

SMS_UCS2_FORCED

Category: sms  ·  Severity: warning  ·  Channel: SMS

The body contains at least one character outside the standard GSM-7 alphabet, which forces the entire message into UCS-2 (Unicode) encoding — cutting the per-segment budget from 160 characters to 70.


What it means

SMS has two text encodings:

  • GSM-7 — the standard alphabet. Fits 160 characters in one segment.
  • UCS-2 — Unicode, needed for emoji and many accented or "smart" punctuation characters. Fits only 70 characters in one segment (67 when concatenated).

The catch: a single non-GSM character forces the whole message to UCS-2. The most common culprits are invisible:

  • Smart quotes: ‘ ’ “ ” (often auto-inserted by word processors) instead of straight quotes ' "
  • Em dashes and ellipsis
  • Emoji

Synapse Inspect reads the encoding directly from the send-path segmenter (render_sms), so if this finding fires, your delivered message really will be UCS-2.


Why it matters

A 90-character message you expected to send as one GSM-7 segment becomes two UCS-2 segments the moment a smart quote sneaks in — doubling the cost. On a large send, one stray character can multiply your SMS bill several times over.


How to fix it

  1. Replace smart quotes with straight quotes' and " instead of ‘ ’ “ ”. This is the single most common fix.
  2. Replace em dashes / ellipsis with GSM-7 equivalents (-, ...).
  3. Replace emoji with GSM-7 text where possible.
  4. Re-check the segment count after editing — removing the non-GSM character usually restores GSM-7 and may resolve a co-occurring SMS_MULTI_SEGMENT.
  5. Or accept the UCS-2 cost knowingly if the character is intentional (for example, a required emoji) — this is a warning, not a block.
Tip

A quick way to catch a hidden smart quote: paste the body into a plain-text editor and look for curly quotation marks. Straight quotes are always GSM-7.


Finding context

json
{
"encoding": "UCS-2",
"char_count": 90,
"segments_count": 2
}