Отправка смайликов через SMS с UTF-8 (а не UTF-16)?

Пытаясь выяснить, почему смайлики вызывают отправку даже коротких сообщений в виде нескольких фрагментов, я наткнулся на этот вопрос , объяснив, что это происходит потому, что они закодированы в UTF-16, а не в ascii.

Теперь мой вопрос: есть ли способ отправить их в UTF-8 вместо этого? Большинство сообщений, которые я отправляю, содержат много латинских букв и очень мало других символов, поэтому все они должны быть намного короче, если закодированы в UTF-8: возможно ли это?

У меня Cyanogenmod 11-M12 (Android 4.4.4) и, если это имеет значение, я использую клавиатуру SwiftKey.

В случае, если это невозможно, дело в протоколе SMS, или в ОС, или даже в клавиатуре?

Большое спасибо!

Это вопрос кодовых страниц, которые использует ОС. 8-битная страница (0-255) уже заполнена обычными буквами, символами и управляющими символами. Нелатинские языки также возвращаются либо к UTF-16, либо к их пользовательской кодовой странице. Проблема в том, что UTF-16 обычно используется для преодоления любых проблем с преобразованием, чтобы все получали одно и то же сообщение, а не какой-то мусор из случайных символов подряд.

Ответы (1)

К сожалению, это ограничение протокола SMS.

Кодировка «ascii» не является обычной, к которой мы привыкли в компьютерном мире, вместо этого она является 7-битной (или GSM 03.38 https://en.wikipedia.org/wiki/GSM_03.38 ) и очень ограниченной.

Если один единственный символ используется за пределами этой 7-битной кодировки, он переключается на UCS2 (дополнительную информацию о том, что UCS2 не является UTF-16, см. здесь https://en.wikipedia.org/wiki/UTF-16 ).

При 7 битах каждый символ занимает 7 бит (doh), а при UCS2 каждый символ занимает 16 бит.

При кодировании некоторых интеграций SMPP (протокола SMS) я видел спорадическую поддержку других наборов символов, но я не думаю, что это вообще принято в дикой природе.