О кодировках и количестве символов в sms

ink740

Проверенные
Многие из нас уже знают, что в одной sms можно передать до 160 латинских или до 70 русских символов. Однако конкретная причина такой дискриминации русскоязычной части населения не всем понятна. Я попытаюсь пролить свет на эту загадочную особенность sms.

Прежде всего, хочу окончательно запутать читателя, сказав, что максимальная длина sms (мы сейчас не имеем в виду так называемые long sms - длинные sms) составляет 140 байт. Это ограничение накладывается на уровне сигнальной сети SS7 и едино для всей сетей GSM (например, в сетях CDMA эта цифра еще меньше). Таким образом, у нас уже есть три числа - 160, 140 и 70. Будем разбираться с каждым по отдельности.

140 - максимальное количество байт, отводимое на тело sms. Здесь самое время вспомнить, что помимо текстовых sms существуют также и бинарные sms, которые служат для передачи рингтонов, изображений, данных по технологии OTA и т.п. Их максимальный размер составляет 140 байт.

160 - максимальное число латинских символов, которое можно передать в одной sms. На самом деле, это те же самые 140 байт - символы упаковываются с помощью процедуры 7-битной упаковки. Кодировка, используемая для передачи латинских символов, содержит 128 различных символов, для кодирования любого из них достаточно 7 бит вместо 8. Учитывая, что 140 байт - это 1120 бит, мы получаем, что в 140 байт можно вместить 160 7-битных символов.

70 - максимальное число русских букв, которые можно передать в одной sms. Причина такого резкого ограничения в том, что каждая русская буква занимает два байта, поскольку является подмножеством кодировки UCS2 (16-битная кодировка для Unicode-символов). При этом кодировка для всей sms едина, т.е. если используется хотя бы одна русская буква, то любой символ (даже латинский) будет занимать два байта.

Не все знают, что некоторые вполне обычные символы, которые обычно относятся к стандартной ASCII-кодировке, в GSM используют два знакоместа. Этих символов немного:

^ { } [ ] | \ ~
Использование таких символов в тексте, содержащем только латинские буквы, приведет к неожиданному уменьшению максимальной длины. Например, sms, состоящая из символов [], сможет вместить только 80 таких символов. Этот эффект не учитывается практически ни одним мобильным оператором - при отправке sms с сайта Вам разрешат набрать до 160 подобных символов наравне со всеми другими.

И еще один интересный момент - в эту же кодировку входят несколько греческих символов. Особенно интересно то, что часть из них выглядит точно так же, как русские буквы:

Ф Г П Л
Эту особенность можно использовать для того, чтобы писать sms на русском языке латинскими символами. Есть довольно много букв латинского языка, которые выглядят точно так же, как русские буквы:

E T O P A H K X C B M e u o p a n m 3 bI
Пример слов, целиком набранных латинскими буквами:

ТОР РОТ ТАНК МОРС TAPAHKA panmop TuTuKaKa MbI CHOBA PAHO BCTAEM u COHHO 3EBAEM.

Имея в запасе буквы Ф Г П Л, можно значительно расширить диапазон подобных текстов. При этом можно написать на русском языке сообщение длиной до 160 символов, поскольку на самом деле используются только латинские символы и греческие символы из той же кодировки. Правда, для этого нужно проявить недюжинную фантазию и богатство лексикона.

Автор статьи Алексей Соколов.
При использовании материалов статьи ссылка на автора и сайт-источник обязательна.
 

OpSOS

Проверенные
Ну что могу сказать.
Писал студент.

Правильно только то, что русский иносранцы не любят.

Символы GSM:



Насчет знаков ^ { } [ ] | \ ~

Т.к. их в кодировке GSM нет, то они преедаются Юникодом, т.е. по 2 символа на знак. Т.е. если у вы к сообщению, написанному латиницей длиной 159 сиволов добавите такую скобку , то у вас отправится 3 СМС.

В дополнение можно сказать, что если СМС склеенная, то для русского длина 1 СМС - 64 символа.
 

Вложения

ink740

Проверенные
OpSOS
да информация в статье несколько не совпадает с реальной.
но я честно написал,что не проверял.ибо смс не люблю из их дороговизны. :( (относительной.
спасибо что указал на неточночность. :)
 

alexs

Новичок
:uhaha: мтс порубать как яйца в салат оливье беспредельные тарифы мега тариф драйв 60 коп минута мтс 2руб минута самый выгодный тариф почуствуй разницу товаристч

Добавлено через 21 минуту 23 секунды:

че не та тема ну еще не освоился
 

Слава

Участник
:crazy: ? :evil: не надо некого рубать а надо просто подумать?! что же мы можем предьявить операторам сотовой связи ??? :( вообщем нам остаётся токо одно :eek: ;)
 
A

Anonymous

Гость
Я понимаю, что немного опоздал, но всё же,
Автор темы полностью прав, господин OpSOS, не вводите в заблуждение! Всё верно, это знаки передаются в виде 2 знакомест в 7-битной кодировке! Если бы они передавались в unicode (UTF-16), то всё смс бы переводилось в кодировку UTF-16, как собственно и происходит, если после 159 букв латиницы добавить русскую-тогда действительно смс станет в три раза тяжелее. Но если добавить один из этих символов, ^ { } [ ] | \ ~ , то сообщение потяжелеет лишь до уровня ещё двух латинских букв, но не до сообщения в UTF-16., то есть, будет сообщение из 2 кусков, а не трёх! Это всё проверено опытным путём, переубеждать меня бесполезно, так как интересовался этим и перепроверял на сто рядов.
P.S. Мне как-то довелось спорить с одной сотрудницей офиса МТС, которая упорно уверяла меня, что одна русская буква в латинском тексте просто больше места займёт, сколько я её не убеждал, что из-за одной русской буквы весь текст переключается в юникод - не верила.
А с символами ^ { } [ ] | \ ~ этого не происходит, эти символы просто два знакоместа занимают и всё.
И ещё, эти же символы при использовании UTF-16 уже занимают одно знакоместо из 70-ти.
 
Сверху