Краткий ответ для США - GSM 03.38 и UTF-16BE, если вы используете Emojis или текст, который GSM 03.38 не может кодировать напрямую.
При отправке / получении SMS-кода кодировка определенно не является UTF-8, поскольку она не поддерживается PDU или протоколом SMPP. Найдите спецификацию SMPP , чтобы выяснить, что поддерживается. Из всех поддерживаемых кодировок единственным вариантом, совместимым с Unicode, является UCS-2BE . Мое наблюдение состоит в том, что большинство телефонов (включая все Android и iPhone) просто предполагают это на самом деле UTF-16BE , потому что это позволяет использовать полный набор символов Unicode (включая такие вещи, как Emojis ?️) .
SMS также имеют специальные обязательные кодировки согласно спецификации GSM03.38 , основанной на септетах. Они допускают до 160 символов на PDU (так как при многих кодировках не все символы составляют 1 единицу кода).
MMS - это еще одно животное, которое не поддерживается далеко за пределами Северной Америки. Но для MMS-кодировки доступны следующие параметры (порядок байтов с прямым порядком байтов или порядка байтов, если он не указан):
- US-ASCII
- ISO-8859-1
- ISO-8859-2
- ISO-8859-3
- ISO-8859-4
- ISO-8859-5
- ISO-8859-6
- ISO-8859-7
- ISO-8859-8
- ISO-8859-9
- SHIFT-JIS
- UTF-8
- BIG5
- UTF-16
MMS, однако, обычно не используется, если вы не отправляете очень длинное сообщение (длиной более 4 PDU, что составляет 560 байт на Android) или если ваше сообщение содержит изображение или что-то, что не может быть закодировано в виде простого SMS.
Стоит также отметить, что MMS намного медленнее, чем SMS, поскольку использует протокол SMTP со специальной адресацией (не основанной на DNS) и специальными составными типами контента (подробности см. MM4 ).