При формировании смс сообщения часто возникает вопрос, сколько символов может содержаться в смс сообщении и, соответственно, какое число смс фактически будет отправлено в каждом конкретном случае.

Вроде бы всё просто: по стандарту GSM, в одном сообщении могут содержаться пользовательские данные (User Data) объёмом 140 байт. При использовании набора 7-битных символов GSM 7 bit data это соответствует 160 символам. При использовании набора символов UCS2 (Unicode 16 бит) это соответствует 70 символам.

Но на самом деле…

Специальные символы алфавита GSM

В стандартный набор символов GSM Default 7 bit входят западноевропейские символы, а также заглавные греческие. Но есть исключения: символы ^{}\[~]|€ (в указанной статье они находятся в таблице Basic Character Set Extension) кодируются с использованием ESC символа, занимая тем самым два символа. Т.е. при использовании таких символов длина сообщения сокращается, т.е. добавив в сообщение один символ евро €, мы уменьшаем максимальную длину сообщения на 1 символ, а добавив обе квадратные скобки – ещё на 2 символа. Т.е. одно сообщение с символом евро и парой квадратных скобок может содержать максимум 157 символов!

Если текст сообщения (с учётом ESC символа) превышает 160 стандартных символов, сообщение может быть отправлено по частям, при этом в пользовательские данные добавляется заголовок (6 байт), в результате текст одного сообщения составляет максимум 153 символа (и это при использовании 8-битного идентификатора сообщения).

16-битный идентификатор сообщения вместо 8-битного

При использовании же 16-битного идентификатора заголовок занимает 7 байт, в результате текст сообщения составляет максимум 151 символ. Надо сказать, что на некоторых телефонах всегда используется 16-битный идентификатор при отправке сообщений, т.е. у них максимальная длина сообщения заведомо меньше стандартной.

Unicode вместо GSM Alphabet

При использовании символов, отсутствующих в стандартном 7-битном наборе, например, кириллицы, сообщение передаётся в UCS2 (Unicode 16 бит), что соответствует 70 символам.

При разбиении длинного сообщения на части добавляется заголовок (6 байт для 8-битного идентификатора), в результате под текст сообщения остаётся 67 символов.

Программа nhsms автоматически определяет подходящую кодировку сообщения: сообщение будет отправлено в GSM 7 bit default alphabet, если текст содержит только символы этого алфавита. В противном случае, текст будет отправлен в UCS2.

Число символов в смс сообщении
Метки:     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *