One Dash, Three Messages

A farmer asks when to spray.

taur.ai / insights
One Dash, Three Messages
September 20265 minBy Jermaine

A farmer asks when to spray. The model answers in exactly 160 characters:

Spray in the early morning or late evening - not at midday. Wind and heat carry the mist off the leaves. Wash hands after, and keep children away from the tank.

That's one SMS. Now swap a single character for the one models prefer:

Spray in the early morning or late evening — not at midday. Wind and heat carry the mist off the leaves. Wash hands after, and keep children away from the tank.

Same length. Same advice. Now it ships as three SMS. The farmer can't tell the two apart. Whoever pays for delivery is billed triple.

How SMS counts

SMS has two encodings. GSM-7 packs each character into 7 bits and fits 160 in a message. UCS-2 spends 16 bits per character and fits 70 8. Longer messages get split, and each part gives up room to a header the phone uses to reassemble them. That leaves 153 characters per segment in GSM-7 and 67 in UCS-2 67. Each segment is billed separately 16.

Most builders miss this: the encoding is chosen per message, not per character. GSM-7 covers basic Latin plus a short list of accented letters and symbols. One character outside that set and the whole message switches to UCS-2 19. The em dash costs nothing extra by itself. It reprices every plain letter around it. At 67 per segment, 160 characters need three.

A quieter trap sits inside GSM-7 itself. The euro sign, square and curly brackets, pipe, tilde, caret and backslash live in an extension table. They stay GSM-7, but each is sent as an escape code plus the character, so each takes two slots.

Why models write like this

Models learned from edited prose, which is full of em dashes, curly quotes, the single-character ellipsis and non-breaking spaces. Chat formatting added bullets and emoji. SMS platforms already warn about that exact list: emoji, smart quotes and long dashes 6; non-breaking spaces and pasted formatting 9; the em dash and the ellipsis 16.

The typography readers now call an AI tell is the same typography that triggers the expensive encoding. One habit, two symptoms.

Don't take anyone's word for how often your model does it. Run your production prompts through your production model, check each reply against the GSM-7 alphabet, and count how many would have switched. That share is your tax rate.

Carriage is the unit cost now

By TAUR's figures, inference cost fell more than 90% in 18 months, from $0.50 to $0.03 a query. Delivery costs didn't follow. A business SMS costs $0.015–$0.035 in Kenya and $0.02–$0.045 in Nigeria 1. The largest share is the termination fee, charged by the network that delivers to the handset 1. Analysts expect operators across Africa, South Asia and Southeast Asia to raise termination fees in line with inflation 2. Regulators are watching the same line item. Nigeria is reviewing termination rates for A2P (business) messaging and USSD. Kenya's regulator, citing its own network cost study, found current rates significantly higher than the actual cost of running the network 4.

Put the two costs side by side. At the top of Kenya's range, one segment costs more than the query that wrote it. At three segments, delivery costs more than generation anywhere in that range.

The farmer never sees this. The cooperative, input supplier or extension service paying per segment does. When the payer isn't the user, a typographic habit lands in someone else's budget, and that budget decides whether the service renews next season.

Fix it at the send step

"No em dashes" in the system prompt works only some of the time. A prompt is a request. The send path is code you control. Put a normaliser between the model and the gateway:

  1. Map typography to GSM-7. Em and en dashes to hyphens, curly quotes to straight quotes, the ellipsis character to three periods, non-breaking spaces to plain spaces, bullets to hyphens. Strip emoji.
  2. Check what's left against the GSM-7 alphabet and extension table. Any other character means the message goes out as UCS-2. Know that before the gateway does.
  3. Budget in segments, not tokens. Derive the character limit from the encoding: 160 for a single message or 153 per part in GSM-7; 70 or 67 in UCS-2. US and Canadian toll-free numbers get 152 and 66 9.
  4. Block overruns. If a reply exceeds the limit, regenerate it shorter or cut it at a sentence boundary.
  5. Log the encoding and segment count for every message, and alert when the UCS-2 share moves. Provider consoles already show the encoding 9.

Some providers handle part of this. Twilio offers Smart Encoding and a Messaging Segment Calculator for exactly this problem 6. Confirm character substitution is actually switched on in your account before you rely on it.

The tax you can't strip

The em dash is a style choice. Some characters aren't.

Yoruba needs ẹ, ọ and ṣ before a single tone mark is added. Standard Hausa uses hooked letters: ɓ, ɗ, ƙ. Amharic is written in Ge'ez script, which always requires Unicode 16. None of these characters are in GSM-7, so every message in these languages goes out as UCS-2: 70 characters, or 67 per segment. Ghana hits it in prices. Neither the cedi sign nor the cent sign is in GSM-7 or its extension table, which, as one Ghanaian provider puts it, makes it "the most expensive character on the keyboard" 16.

The standard does have a workaround. 3GPP defined national-language shift tables, which keep a message in 7 bits while swapping in local characters. Turkish, Spanish and Portuguese got one. So did a set of South Asian languages. No African language has one.

For the 3.4 billion people who can send a text but can't get online (TAUR's figure), SMS isn't a fallback. It's the main interface. You can strip a dash. You can't strip the tone marks from someone's name. Coverage reached; usability didn't. Part of that gap is built into the character table.

Ready to build at the edge of where AI ends and people begin?

Get Early Access