SMS-сообщения без кодировки символов ASCII - PullRequest
7 голосов
/ 18 августа 2011

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 18 августа 2011

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

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

6 голосов
/ 06 июня 2012

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

5 голосов
/ 18 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...