Most African languages written in the Latin alphabet without special letters, including Swahili, Kinyarwanda, Kirundi, Somali, Oromo, Zulu, Xhosa, Shona, Chichewa and Hausa written without hooked letters, fit the GSM-7 character set and get 160 characters per SMS. Amharic, Tigrinya and Arabic always need Unicode (UCS-2), as do French or Portuguese messages with letters such as ê, ç or ã, and Yoruba or Igbo with dot-below letters: those get only 70 characters per SMS, or 67 per part in a longer message.
Last reviewed: 28 October 2026. Rules and network practice change; check the linked sources for anything you rely on.
Because SMS is billed per segment, the choice of characters can double or triple the cost of a campaign. This guide goes language by language through what fits, what does not, and how to write messages that read well without paying for segments you do not need.
How the two encodings work
3GPP TS 23.038 defines the alphabets an SMS can use. Two matter in practice:
- GSM-7 packs each character into 7 bits, so 160 fit in the 140-byte payload. Its basic table covers A to Z, digits, common punctuation and a short list of accented letters: é, è, à, ù, ì, ò, É, ä, ö, ü, ñ, å, ø, æ and their capitals in some cases. An extension table adds €, [, ], {, }, \, ~, ^ and |, each of which costs two characters.
- UCS-2 uses 16 bits per character and can carry the Basic Multilingual Plane of Unicode: Ethiopic, Arabic, every Latin accent. Only 70 characters fit in one SMS.
The switch is all or nothing. One character outside GSM-7 anywhere in the message, even a curly apostrophe copied from a word processor, turns the entire message into UCS-2.
Segment maths
| Encoding | One segment | Each part of a longer message | 2 parts | 3 parts | 4 parts |
|---|---|---|---|---|---|
| GSM-7 | 160 | 153 | up to 306 | up to 459 | up to 612 |
| UCS-2 | 70 | 67 | up to 134 | up to 201 | up to 268 |
The per-part figures are lower because a long message carries a small header (the UDH) in each part so the phone can reassemble it, as described in 3GPP TS 23.040.
Language by language
| Language | Where (live markets) | Script | GSM-7? | What to watch |
|---|---|---|---|---|
| Swahili | Kenya, Tanzania, Uganda, DR Congo | Latin | Yes | No special letters; 160 characters per SMS |
| Kinyarwanda, Kirundi | Rwanda, Burundi | Latin | Yes | Fits GSM-7 |
| Luganda | Uganda | Latin | Mostly | The letter ŋ (as in ng') is not in GSM-7; many writers already use ng' in SMS |
| Somali | Somalia, Djibouti | Latin | Yes | No diacritics in standard spelling |
| Amharic | Ethiopia | Ge'ez (Ethiopic) | No | Always UCS-2: 70 / 67 characters |
| Tigrinya | Eritrea, Ethiopia | Ge'ez (Ethiopic) | No | Always UCS-2 |
| Oromo | Ethiopia | Latin (Qubee) | Yes | Uses the apostrophe, which is GSM-7 if it is the straight one |
| Arabic | Egypt, Morocco, Algeria, Libya, Chad, Djibouti, Comoros | Arabic | No | Always UCS-2; right-to-left text mixed with Latin brand names and numbers needs a handset test |
| French | Most of West and Central Africa, Rwanda, Madagascar, North Africa | Latin | Partly | é è à ù are fine; ê â î ô û ë ï œ switch to UCS-2; lowercase ç is not in the basic table |
| Portuguese | Angola, Mozambique, Cape Verde, Guinea-Bissau | Latin | Rarely | á ã õ ê ó í ç are all outside GSM-7 |
| Spanish | Equatorial Guinea | Latin | Partly | ñ, é, ¿ and ¡ fit; á í ó ú do not |
| Yoruba | Nigeria, Benin | Latin | Only without diacritics | ẹ ọ ṣ and tone marks such as á need UCS-2 |
| Igbo | Nigeria | Latin | Only without diacritics | ị ọ ụ ṅ need UCS-2 |
| Hausa | Nigeria, Niger | Latin (Boko) | Only without hooked letters | ɓ ɗ ƙ need UCS-2; SMS writers often use plain b, d, k |
| Wolof | Senegal, Gambia | Latin | Partly | ë (as in Jërëjëf) and ó switch to UCS-2 |
| Lingala | DR Congo, Congo-Brazzaville | Latin | Mostly | Formal spelling uses ɛ and ɔ, which need UCS-2; everyday SMS usually does not |
| Zulu, Xhosa, Shona, Chichewa, Bemba | South Africa, Zimbabwe, Malawi, Zambia | Latin | Yes | Fits GSM-7 |
| Afrikaans | South Africa | Latin | Partly | ê, ë, ô (as in sê) need UCS-2 |
| Malagasy | Madagascar | Latin | Mostly | Standard spelling rarely uses accents; ô occasionally appears |
3GPP TS 23.038 also defines national language shift tables (for Portuguese and Spanish, among others) that would let some accents fit in 7 bits, but support across networks and handsets is not reliable enough to plan on. Assume UCS-2 for any character not in the basic table.
What this does to cost
The same notice can cost one or two segments depending on one letter. Here is a French message from a shop in Abidjan, 106 characters:
Bonjour Awa, votre commande est prête. Retrait à l'agence du Plateau avant vendredi. Merci, Boutique Kanté
The ê in "prête" makes it UCS-2, so 106 characters need 2 segments. Rewrite "est prête" as "est disponible" and the message is 111 characters of GSM-7: 1 segment. Both à and é are in GSM-7, so they can stay. At one segment to Cote d'Ivoire costing XOF 30 ($0.0514), a 20,000-recipient send costs half as much in the second version.
A Portuguese message shows the same effect: "Olá João, a sua encomenda está pronta..." at 102 characters is 2 segments in UCS-2. Dropping the accents fits it into one, but many readers in Angola or Mozambique will find unaccented Portuguese sloppy, so decide per audience.
For Amharic and Arabic there is no shortcut: the script itself is UCS-2. Plan for 67 characters per part. An Amharic appointment reminder of 120 characters is 2 segments; at $0.0356 per segment to Ethiopia, budget twice the single-segment rate per recipient. To Egypt, a 200-character Arabic notice is 3 segments at EGP 0.8047 each. Full budgeting examples are in how to calculate bulk SMS cost.
Writing tips that keep meaning and cut segments
- Replace typographic characters. Curly quotes, the long dash, the ellipsis character and non-breaking spaces from Word or Excel all force UCS-2. Use straight quotes, a hyphen and three full stops.
- Skip emoji in high-volume sends. An emoji forces UCS-2 and most take two of the 70 characters.
- Rephrase rather than strip accents in French and Portuguese: "disponible" instead of "prête" keeps the French correct and the message in GSM-7. Leave é, è, à and ù alone; they are already GSM-7.
- Write Amharic and Arabic messages short. Put the key fact first, use digits for dates and amounts, and move details behind a short link with eSMS Links.
- Do not transliterate scripts your readers expect. Romanised Amharic or Arabic saves money but many recipients find it harder to read, and it can look like spam.
- Test on real handsets. Older feature phones may lack fonts for Ethiopic, and right-to-left Arabic mixed with a Latin brand name can reorder unexpectedly.
- Measure the longest merged message, not the template. A long customer name can push a message into a second segment.
How eSMS handles encoding
With the API and the dashboard you send ordinary UTF-8 text. The platform detects whether it fits GSM-7, encodes it, splits long messages and bills per segment. The dashboard composer shows the segment count and the longest real message after merge fields, names the character that forced Unicode and offers a GSM-7 replacement where one exists. Over SMPP you encode yourself and set data_coding to 8 for UCS-2; see the SMPP bind checklist.
If you want to check copy before it reaches the dashboard, this Python sketch counts segments the same way:
# Rough segment counter for planning (GSM-7 basic + extension tables, 3GPP TS 23.038)
GSM = set("@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?"
"¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà")
EXT = set("^{}\\[~]|€") # each costs 2 characters
def segments(text):
if all(c in GSM or c in EXT for c in text):
n = sum(2 if c in EXT else 1 for c in text)
return "GSM-7", n, 1 if n <= 160 else -(-n // 153)
n = sum(2 if ord(c) > 0xFFFF else 1 for c in text) # emoji take 2 UCS-2 units
return "UCS-2", n, 1 if n <= 70 else -(-n // 67)
print(segments("Bonjour Awa, votre commande est prête.")) # ('UCS-2', 38, 1)
print(segments("Habari Amina, malipo yako yamepokelewa.")) # ('GSM-7', 39, 1)For a quick answer on emoji and special characters, see do you support Unicode and emoji.
Frequently asked questions
Does Swahili count as Unicode SMS?
No. Standard Swahili uses only letters in the GSM-7 set, so you get 160 characters per SMS (153 per part when longer), as long as you avoid curly quotes and emoji.
How many Amharic characters fit in one SMS?
70 in a single message. A longer message is split into parts of 67 characters each, and each part is billed as a segment.
Why did my French message cost two SMS when it was under 160 characters?
It almost certainly contained a character outside GSM-7, such as ê, ô, ç or a curly apostrophe. That switches the whole message to UCS-2 with a 70-character limit.
Can I mix Arabic and English in one SMS?
Yes, but the whole message is then UCS-2, so the 70 and 67 character limits apply to the English part too.
Is é a Unicode character in SMS?
No. é, è, à and ù are in the GSM-7 basic table and do not change the encoding. ê and â are not.
Sources
- 3GPP - TS 23.038, Alphabets and language-specific information (GSM-7 tables, UCS-2, national language shift tables)
- 3GPP - TS 23.040, Technical realisation of SMS (concatenation header)
- Unicode Consortium - Ethiopic code chart (Amharic, Tigrinya)
- Unicode Consortium - Arabic code chart
- Unicode Consortium - Latin Extended Additional (Yoruba and Igbo dot-below letters)
- Unicode Consortium - Latin Extended-B (Hausa hooked letters)
Writing for a multilingual audience? Check prices per segment on the pricing page, see regional language notes in bulk SMS in North Africa and West Africa, or create an account and test your copy in the composer before you send.


