Кодировка символов SMS сообщений non ASCII

У меня есть телефон Nokia N900, и при отправке SMS виджет отображает количество символов, оставшихся в сообщении (и количество фактических коротких сообщений, необходимых для отправки всего сообщения).

Я живу во Франции, где я заметил следующую странность при написании сообщений с non-ASCII символы:

  • некоторые символы, отличные от ASCII, кодируются на одном символе / байте, например "é", "è", "à",">
  • наличие некоторых символов, отличных от ASCII, таких как " ç", "ê"," ô " потребляет фиксированное количество 90 char / байт + 1 байт на символ
  • присутствие второго "ç", "ê" и т. д. потребляет только 1 дополнительный байт.

поэтому мне интересно, как кодируются сообщения, потому что я не вижу приведенной выше схемы, соответствующей традиционным кодировкам, которые я знаю (iso-8859-1, UTF-8, UTF-16...).

3 ответов


https://en.wikipedia.org/wiki/SMS#Message_size

зависит от кодирования, SMS можно отправить 160/140/70 символов. Если какой-либо из символов не ASCII используется, все сообщение должно быть закодировано в UTF-16, следовательно, "потребление", которое вы испытали.


@Vicky и @timdream правы, за исключением того, что я считаю, что это технически UCS-2 и не UTF-16, который иногда использует телефон, который имеет фиксированный 16-битный размер на символ. UTF-16 использует переменную ширину двух или четырех байтов на символ, в зависимости от кодируемого символа. эта статья в Википедии объясняет это в деталях. UCS-2 строго принимает сообщение до 70 символов максимум (160 байт). Хотя описание консорциума Unicode из UCS-2 немного запутанно, несколько сайтов по всему интернету, занимающихся SMS, подтверждают, что Википедия права.


У вас уже есть ответ от @timdream, а просто дополнительный момент, что некоторые символы, которые вы укажете в комплекте в GSM-7-битный алфавит как отдельные персонажи, некоторые кодируются в сетях GSM 7-битные через дополнительный экранирующий символ (так что два байта для представления этого символа) и некоторые не могут быть закодированы на всех в GSM 7-битные и должны быть в кодировке UTF-16 вместо.

полное определение алфавита здесь: http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT

обратите внимание на особую особенность c-cedilla-из этого файла,

спецификация ETSI GSM 03.38 показывает верхний регистр C-cedilla глиф на 0x09. Это может быть результатом ограниченного отображения функции для обработки символов с "хвостиками". Однако, этот намерение языкового покрытия явно для нижнего регистра c-cedilla, как показано на карте ниже. Отображение для верхний регистр C-cedilla показанный в прокомментированной строке таблицы отображения.

некоторые устройства кодируют как верхний, так и нижний регистр c-cedilla как один и тот же кодированный символ (0x09).