В мобильной телефонии GSM 03.38 или 3GPP 23.038 — это кодировка символов, используемая в сетях GSM для SMS (Short Message Service), CB ( Cell Broadcast ) и USSD (Unstructured Supplementary Service Data). Стандарт 3GPP TS 23.038 (первоначально рекомендация GSM 03.38) определяет 7-битный алфавит GSM по умолчанию , который является обязательным для телефонов GSM и сетевых элементов, [1] но набор символов подходит только для английского языка и ряда западноевропейских языков. Такие языки, как китайский, корейский или японский, должны передаваться с использованием 16-битной кодировки символов UCS-2 . Ограниченное количество языков, таких как португальский , испанский , турецкий и ряд языков, используемых в Индии , написанных с помощью брахмического письма, могут использовать 7-битную кодировку с таблицей сдвига национального языка, определенной в 3GPP 23.038. Для двоичных сообщений используется 8-битная кодировка.
Стандартной кодировкой для сообщений GSM является 7-битный алфавит по умолчанию, определенный в рекомендации 23.038.
Семибитные символы должны быть закодированы в октеты, следуя одному из трех режимов упаковки:
Важно (особенно когда сообщение должно быть сегментировано с использованием механизма конкатенированных SMS ), чтобы символы из таблицы базового набора символов занимали один септет, символы из таблицы расширения базового набора символов занимали два септета.
Обратите внимание, что вторая часть таблицы доступна только в том случае, если GSM-устройство поддерживает механизм 7-битного расширения с использованием префикса символа ESC. В противном случае сам код ESC интерпретируется как пробел, а следующий символ будет рассматриваться так, как если бы не было начального кода ESC.
Большая часть верхней части таблицы не используется в наборе символов по умолчанию, но стандарт GSM определяет некоторые индикаторы кодов языков, которые позволяют системе идентифицировать национальные варианты этой части, чтобы поддерживать больше символов, чем те, которые отображаются в приведенной выше таблице.
В стандартном текстовом сообщении GSM все символы кодируются с использованием 7-битных кодовых единиц, упакованных вместе для заполнения всех битов октетов. Так, например, 140-октетный конверт SMS [ 3 ] без какого-либо другого языкового индикатора, а только с префиксом стандартного класса, может передавать до (140*8)/7=160, то есть 160 7-битных символов GSM (но обратите внимание, что код ESC учитывается для одного из них, если используются символы в верхней части таблицы).
Можно отправлять и более длинные сообщения, но для этого потребуется префикс продолжения и порядковый номер в последующих SMS-сообщениях (эти байты префикса и порядковый номер учитываются в максимальной длине 140-октетной полезной нагрузки формата конверта).
Если в последнем октете сообщения имеется от 1 до 6 запасных битов, эти биты устанавливаются в ноль (эти биты не считаются символом, а только заполнителем). Если в последнем октете сообщения имеется 7 запасных битов, эти биты устанавливаются в 7-битный код управления CR (также используемый в качестве заполнителя-заполнителя) вместо того, чтобы быть установленными в ноль (где они были бы спутаны с 7-битным кодом символа '@').
Эта 7-битная кодировка позволяет переносить тексты, состоящие из печатных символов из Basic Latin (блок Unicode) (за исключением грависного ударения/обратной кавычки), а также некоторые символы набора символов ISO Latin 1. Она также позволяет кодировать тексты, написанные греческим шрифтом, но только заглавными буквами; для такого использования в греческом языке латинские заглавные буквы, которые выглядят как греческие буквы, повторно используются с тем же кодом, так что указанный выше набор символов является полным только для современного монотонного греческого языка, ограниченного заглавными буквами. Полная поддержка греческого алфавита (включая строчные буквы) требует национальной версии смещенной 7-битной таблицы (использующей код ESC для каждого национального символа, закодированного в этой смещенной таблице), или неуказанной фирменной 8-битной кодировки, или использования кодировки UCS-2 (см. ниже).
Обратите внимание, что специальный код, обозначенный SS2 в таблице выше, также был назначен (и закодирован как 0x1B,0x1B), чтобы разрешить использование другой альтернативной 7-битной таблицы сдвига. Но этот механизм никогда не использовался, и предпочтительнее было использовать кодировку UCS-2.
Обратите внимание, что в современной реализации символ 0x09 ( Ç , заглавная C с седилем) следует заменить на ç (строчная c с седилем), как рекомендовано Unicode [4] , поскольку версия в верхнем регистре малополезна.
Режим кодирования данных 8 бит обрабатывает информацию как необработанные данные. Согласно стандарту, алфавит для этого кодирования зависит от пользователя.
Эта кодировка позволяет использовать более широкий диапазон символов и языков. UCS-2 может представлять наиболее часто используемые латинские и восточные символы ценой больших затрат пространства. Строго говоря, UCS-2 ограничен символами в базовой многоязыковой плоскости . Однако, поскольку современные среды программирования не предоставляют кодировщиков или декодеров для UCS-2, некоторые мобильные телефоны (например, iPhone ) используют UTF-16 вместо UCS-2. [5] Это работает, потому что для символов в базовой многоязыковой плоскости (включая полные алфавиты большинства современных человеческих языков) кодировки UCS-2 и UTF-16 идентичны. Для кодирования символов за пределами BMP (недоступных в простом UCS-2), таких как эмодзи , UTF-16 использует суррогатные пары , которые при декодировании с помощью UCS-2 будут отображаться как две допустимые, но не сопоставленные кодовые точки .
Одно SMS-сообщение GSM, использующее эту кодировку, может содержать не более 70 символов (140 октетов).
Обратите внимание, что на многих сотовых телефонах GSM нет специального предварительного выбора кодировки UCS-2. По умолчанию используется 7-битная кодировка, описанная выше, пока не будет введен символ, которого нет в 7-битной таблице GSM (например, строчная буква «a» с акутом: «á»). В этом случае все сообщение перекодируется с использованием кодировки UCS-2, а максимальная длина сообщения, отправляемого в одном SMS, немедленно сокращается до 70 символов вместо 160. Другие варьируются в зависимости от выбора и конфигурации приложения SMS, а также длины сообщения [ необходима цитата ] .
Чтобы избежать непредвиденных расходов для отправителей, имеющих подписку на ограниченный пакет отправленных SMS, приложения должны [ по мнению кого? ] отображать количество использованных символов и максимальное количество символов в составленном SMS. Когда сообщение превышает этот максимум, сообщение будет [ требуется разъяснение ] отправлено в виде нескольких последовательных SMS, содержащих части сообщения (каждая из которых содержит порядковый номер, который также использует несколько начальных символов в каждой части); эти части предназначены для [ требуется цитата ] повторной сборки получателем позже.
Некоторые приложения предупреждают пользователя, когда сообщение необходимо разделить, или даже отправляют более длинное сообщение в виде мультимедийного сообщения (MMS).
Начиная с версии 8 стандарта 3GPP 23.038 от марта 2008 года, доступ к дополнительным наборам символов можно получить с помощью таблиц сдвига национальных языков.
Эти таблицы позволяют использовать различные наборы символов в соответствии с языком, на котором будет написан текст. Выбор таблицы для данного сообщения выбирается в разделе заголовка пользовательских данных SMS-сообщения и может быть указан для всего текста ( таблица сдвига блокировки , заменяющая стандартную таблицу алфавита GSM 7-бит по умолчанию) или для одного символа ( таблица сдвига одинарной замены, заменяющая таблицу расширения алфавита GSM 7-бит по умолчанию). Таблицы сдвига блокировки и одинарной замены вместе в одном сообщении возможны, если необходимо заменить как стандартную таблицу алфавита по умолчанию, так и таблицу расширения алфавита по умолчанию.
Используя таблицу сдвига, сообщение может по-прежнему использовать 7-битную кодировку для символов, но можно выбрать другой набор для правильного отображения акцентированных и специфичных для языка символов. Это позволяет использовать до 155 символов, закодированных в 136 октетах (140 октетов, минус 4 октета заголовка пользовательских данных , необходимых для указания использования таблицы сдвига и кода языка). С таблицами Locking и Single shift разрешено использовать до 152 символов, закодированных в 133 октетах (140 октетов, минус 7 октетов заголовка пользовательских данных ).
Символы из любой таблицы сдвига блокировки занимают один септет, символы из таблицы одинарного сдвига (или таблицы расширения базового набора символов) занимают два септета.
Первоначально таблицы смен были указаны только для турецкого языка; испанский и португальский языки были добавлены в более поздних версиях версии 8. В версии 9 были представлены 10 языков, используемых в Индии с брахмическим письмом (бенгали, гуджарати, хинди, каннада, малаялам, ория, пенджаби, тамильский, телугу) и урду .
До сих пор не существует определенной таблицы сдвига национальных языков для французского, греческого, русского, болгарского, арабского, иврита и большинства центральноевропейских языков, которым требуется лучшее покрытие, чем стандартный 7-битный набор символов по умолчанию и его расширенный 7-битный набор символов по умолчанию: если когда-либо будет составлен какой-либо символ, который не может быть представлен в этих стандартных 7-битных наборах GSM, сообщение будет автоматически перекодировано с использованием UCS-2, что приведет к разделению более чем на два максимальной длины сообщений в символах, которые могут быть отправлены по цене одного SMS (когда сообщение разделено на несколько частей, в заголовке пользовательских данных необходимо несколько дополнительных октетов для указания порядкового номера каждой части).
Хотя пересмотр GSM 03.38 (еще в версии 4.0.1 от сентября 1994 года) определил значения схемы кодирования данных для Cell Broadcast System (CBS) для немецкого, английского, итальянского, французского, испанского, голландского, шведского, датского, финского, норвежского, греческого и турецкого языков; с добавлением венгерского, польского, чешского, иврита, арабского, русского и исландского языков в более поздних пересмотрах, для этих языков не были определены таблицы кодирования. Целью этого поля была исключительно идентификация языка сообщения.
Также нет таблицы сдвига языка для японского языка, написанного на базовых кана, или для корейского языка, написанного на хангыль джамо, или для китайского языка, написанного на ханьском письме. Это часто не является проблемой в Японии, поскольку она использует другие стандарты, нежели GSM и WAP для обмена сообщениями. Два других языка также имеют слишком много различных символов, чтобы вписаться в 7-битную таблицу сдвига.
Для испанского языка нет специального набора символов Locking Shift. Использует базовый набор символов по умолчанию.
Его также можно использовать для языка синдхи, также использующего арабскую графику.
Иногда он может использоваться и для арабского языка , но восточные цифры (закодированные здесь в их персидско-индуистском варианте) не будут использоваться в этом случае, поскольку стандартный арабский язык предпочитает свои традиционные восточно-арабские цифры и часто заменяется западно-арабскими цифрами (закодированными в наборе символов locking shift в столбце 0x30), которые также часто используются в урду. Однако в Индии телефоны, распознающие индикацию арабского языка, могут заменять персидско-индуистские варианты восточно-арабских цифр традиционными восточно-арабскими цифрами.