В мобильной телефонии GSM 03.38 или 3GPP 23.038 - это кодировка символов, используемая в сетях GSM для SMS (служба коротких сообщений), CB ( сотовая широковещательная передача ) и USSD (неструктурированные дополнительные служебные данные). Стандарт 3GPP TS 23.038 (первоначально рекомендация GSM 03.38) определяет 7-битный алфавит GSM по умолчанию, который является обязательным для телефонов GSM и сетевых элементов, но набор символов подходит только для английского и ряда западноевропейских языков. Такие языки, как китайский, корейский или японский, необходимо передавать с использованием 16-битной кодировки символов UCS-2 . Ограниченное количество языков, таких как португальский , испанский , турецкий и ряд языков, используемых в Индии, написанных с использованием скриптов Brahmic, может использовать 7-битную кодировку с таблицей сдвига национального языка, определенной в 3GPP 23.038. Для двоичных сообщений используется 8-битная кодировка.
7-битный алфавит GSM по умолчанию и таблица расширений 3GPP TS 23.038 / GSM 03.38
Стандартной кодировкой сообщений GSM является 7-битный алфавит по умолчанию, как определено в рекомендации 23.038.
Семибитные символы должны быть закодированы в октеты в соответствии с одним из трех режимов упаковки:
- CBS: используя эту кодировку, можно отправить до 93 символов (с упаковкой до 82 октетов) в одном SMS-сообщении в службе сотового вещания.
- SMS: используя эту кодировку, можно отправить до 160 символов (упакованных до 140 октетов) в одном SMS-сообщении в сети GSM.
- USSD: используя эту кодировку, можно отправить до 182 символов (упакованных до 160 октетов) в одном SMS-сообщении с неструктурированными дополнительными служебными данными.
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это таблица перехода к расширению (отображается в NBSP).
-
SP - это космический персонаж.
|
Расширение базового набора символов
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
|
|
|
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
|
€ |
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
|
|
|
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
|
|
} |
|
|
|
|
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
|
|
|
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Важно (особенно когда сообщение должно быть сегментировано с использованием механизма конкатенированного SMS ), чтобы символы из таблицы базового набора символов занимали один септет, а символы из таблицы расширения базового набора символов занимали два септета.
Обратите внимание, что вторая часть таблицы доступна только в том случае, если устройство GSM поддерживает 7-битный механизм расширения с использованием префикса символа ESC. В противном случае сам код ESC интерпретируется как пробел, а следующий символ будет обрабатываться так, как если бы не было ведущего кода ESC.
Большая часть верхней части таблицы не используется в наборе символов по умолчанию, но стандарт GSM определяет некоторые индикаторы кода языка, которые позволяют системе идентифицировать национальные варианты этой части, чтобы поддерживать больше символов, чем показано в приведенной выше таблице.
В стандартном текстовом сообщении GSM все символы кодируются с использованием 7-битных кодовых единиц, упакованных вместе, чтобы заполнить все биты октетов. Так, например, 140-октетный конверт SMS без индикатора другого языка, а только со стандартным префиксом класса, может передавать до (140 * 8) / 7 = 160, то есть 160 7-битных символов GSM (но обратите внимание, что код ESC засчитывается для одного из них, если используются символы в верхней части таблицы).
Могут быть отправлены более длинные сообщения, но для последующих SMS-сообщений потребуется префикс продолжения и порядковый номер (эти байты префикса и порядковый номер считаются в пределах максимальной длины 140-октетной полезной нагрузки формата конверта).
Когда в последнем октете сообщения содержится от 1 до 6 запасных битов, эти биты устанавливаются в ноль (эти биты не считаются символом, а только заполнителем). Когда в последнем октете сообщения есть 7 запасных битов, эти биты устанавливаются на 7-битный код элемента управления CR (также используемый как заполнитель заполнения) вместо того, чтобы быть установленным на ноль (где их можно было бы спутать с 7-битный код символа '@').
Эта 7-битная кодировка позволяет транспортировать тексты, закодированные в подмножестве ASCII Basic Latin, а также некоторые символы из набора символов ISO Latin 1. Он также позволяет кодировать тексты, написанные греческим шрифтом, но только заглавными буквами; для такого использования в греческом языке заглавные латинские буквы, которые выглядят как греческие буквы, повторно используются с тем же кодом, так что приведенный выше набор символов является полным только для современного монотонного греческого языка, ограниченного заглавными буквами. Для полной поддержки греческого алфавита (включая строчные буквы) требуется национальная версия смещенной 7-битной таблицы (с использованием кода ESC для каждого национального символа, закодированного в этой смещенной таблице), или неуказанная проприетарная 8-битная кодировка, или использование кодировки UCS-2 (см. ниже).
Обратите внимание, что специальный код, помеченный как SS2 в приведенной выше таблице, также был назначен (и закодирован как 0x1B, 0x1B), чтобы разрешить использование другой альтернативной 7-битной таблицы сдвига. Но этот механизм никогда не использовался, и предпочтение было отдано кодировке UCS-2.
Обратите внимание, что символ 0x09 ( Ç , заглавная C с седилем) следует вместо этого заменить на ç (маленький c с седилем) в современной реализации, как рекомендовано Unicode, поскольку версия в верхнем регистре мало используется.
8-битное кодирование данных GSM
В 8-битном режиме кодирования данных информация обрабатывается как необработанные данные. Согласно стандарту, алфавит для этой кодировки зависит от пользователя.
Кодировка UCS-2
Эта кодировка позволяет использовать больший диапазон символов и языков. UCS-2 может представлять наиболее часто используемые латинские и восточные символы за счет больших затрат места. Строго говоря, UCS-2 ограничен символами в базовой многоязычной плоскости . Однако, поскольку современные среды программирования не предоставляют кодировщики или декодеры для UCS-2, некоторые сотовые телефоны (например, iPhone ) используют UTF-16 вместо UCS-2. Это работает, потому что для символов в базовой многоязычной плоскости (включая полные алфавиты большинства современных человеческих языков) кодировки UCS-2 и UTF-16 идентичны. Для кодирования символов вне BMP (недоступных в обычном UCS-2), таких как Emoji , UTF-16 использует суррогатные пары , которые при декодировании с помощью UCS-2 будут отображаться как две действительные, но не отображенные кодовые точки .
Одно SMS-сообщение GSM с использованием этой кодировки может содержать не более 70 символов (140 октетов).
Обратите внимание, что на многих сотовых телефонах GSM нет специального предварительного выбора кодировки UCS-2. По умолчанию используется 7-битная кодировка, описанная выше, до тех пор, пока не будет введен символ, которого нет в 7-битной таблице GSM (например, строчная буква «а» с акцентом: «á»). В этом случае все сообщение перекодируется с использованием кодировки UCS-2, а максимальная длина сообщения, отправляемого в одном SMS-сообщении, сразу же сокращается до 70 символов вместо 160. Другие значения зависят от выбора и конфигурации приложения SMS. , и длина сообщения.
Чтобы избежать непредвиденных расходов для отправителей, которые имеют подписку на ограниченный пакет отправленных SMS, приложения должны отображать количество используемых символов и максимальное количество символов в составленном SMS. Когда сообщение превышает этот максимум, сообщение будет отправлено как несколько последовательных SMS-сообщений, содержащих части сообщения (каждая из которых содержит порядковый номер, который также использует несколько ведущих символов в каждой части); эти части предназначены для повторной сборки получателем.
Некоторые приложения предупреждают пользователя, когда сообщение требует разделения, или даже отправляют более длинное сообщение в виде мультимедийного сообщения (MMS).
Таблицы смены национальных языков
Начиная с выпуска 8 стандарта 3GPP 23.038 от марта 2008 г., к дополнительным наборам символов можно получить доступ с помощью таблиц сдвига национальных языков.
Эти таблицы позволяют использовать различные наборы символов в зависимости от языка, на котором будет написан текст. Таблица для данного сообщения выбирается в разделе « Заголовок пользовательских данных » SMS-сообщения и может быть указана для всего текста ( таблица с блокировкой сдвига, заменяющая стандартную 7-битную алфавитную таблицу по умолчанию GSM) или для одного символа ( одиночный сдвиг таблицу, заменяющую 7-битную таблицу расширений алфавита по умолчанию GSM). Блокировка и Одиночные таблицы сдвига вместе в том же сообщении возможно, если оба стандартная таблица алфавита по умолчанию и таблица расширения по умолчанию алфавита должны быть заменена.
Используя таблицу сдвига, сообщение может по-прежнему использовать 7-битную кодировку символов, но можно выбрать другой набор для правильного отображения акцентированных и языковых символов. Это позволяет использовать до 155 символов, закодированных в 136 октетов (140 октетов, за вычетом 4 октетов заголовка пользовательских данных, необходимых для указания использования таблицы сдвига и кода языка). В таблицах с блокировкой и одинарной сменой допускается до 152 символов, закодированных в 133 октета (140 октетов, минус 7 октетов заголовка пользовательских данных ).
Символы из любой таблицы с блокировкой сдвига занимают один септет, символы из таблицы одинарного сдвига (или таблицы расширения базового набора символов) занимают два септета.
Изначально были указаны таблицы смен только для турецкого языка; В более поздних версиях версии 8 были добавлены испанский и португальский языки. В версии 9 представлены 10 языков, используемых в Индии, написанных с использованием брахмических шрифтов (бенгали, гуджарати, хинди, каннада, малаялам, ория, пенджаби, тамильский, телугу) и урду .
До сих пор не существует определенной таблицы сдвига национального языка для французского, греческого, русского, болгарского, арабского, иврита и большинства центральноевропейских языков, которые нуждаются в лучшем охвате, чем 7-битный стандартный набор символов по умолчанию и 7-битный расширенный набор символов по умолчанию: если когда-либо составлен какой-либо символ, который не может быть представлен в этих 7-битных наборах GSM по умолчанию, сообщение будет автоматически перекодировано с использованием UCS-2 с эффектом деления более чем на два максимальной длины в символах сообщений, которые могут быть отправлены по цене одного SMS (когда сообщение разбито на несколько частей, в заголовке пользовательских данных требуется еще несколько октетов, чтобы указать порядковый номер каждой части).
Хотя в редакции GSM 03.38 (уже в версии 4.0.1 от сентября 1994 г.) определены значения схемы кодирования данных для системы сотового вещания (CBS) для немецкого, английского, итальянского, французского, испанского, голландского, шведского, датского, финского языков. , Норвежский, греческий и турецкий; с добавлением в более поздних редакциях венгерского, польского, чешского, иврита, арабского, русского и исландского языков, таблицы кодирования для этих языков не определены. Это поле предназначалось исключительно для определения языка сообщения.
Также нет таблицы языкового сдвига для японского, написанного базовыми канами, для корейского, написанного хангыльским чамос, или для китайского, написанного ханьским письмом. В Японии это часто не проблема, поскольку для обмена сообщениями используются стандарты, отличные от GSM и WAP. Два других языка также содержат слишком много разных символов, чтобы поместиться в 7-битную таблицу сдвига.
Испанский язык (латиница)
Для испанского языка нет специального набора символов с блокировкой сдвига. Использует базовый набор символов по умолчанию.
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
Набор символов Single Shift для испанского языка UDH содержит 0x24 0x01 0x02
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
Á |
|
á |
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
Ú |
€ |
ú
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
|
|
|
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
ç |
|
} |
|
Я |
|
я |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
Ó |
|
ó |
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Португальский язык (латиница)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
Набор символов Single Shift для португальского языка UDH содержит 0x24 0x01 0x03
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
А |
|
 |
|
0x02
|
|
Φ |
|
|
|
|
|
|
0x03
|
|
Γ |
|
|
|
|
|
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
ê |
Ω |
|
|
|
Ú |
€ |
ú
|
0x06
|
|
Π |
|
|
|
|
|
|
0x07
|
|
Ψ |
|
|
|
|
|
|
0x08
|
|
Σ |
{ |
|
|
|
|
|
0x09
|
ç |
Θ |
} |
|
Я |
|
я |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
Ô |
SS2 |
|
|
|
à |
|
ã
|
0x0C
|
ô |
|
|
[ |
|
Õ |
|
х
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
Á |
|
|
] |
|
|
|
|
0x0F
|
á |
Ê |
\ |
|
Ó |
|
ó |
â
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Турецкий язык (латиница)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
Набор символов Single Shift для турецкого языка UDH содержит 0x24 0x01 0x01
|
0x00 |
0x10 |
0x20 |
0x30 |
0x40 |
0x50 |
0x60 |
0x70
|
0x00
|
|
|
|
|
| |
|
|
|
0x01
|
|
|
|
|
|
|
|
|
0x02
|
|
|
|
|
|
|
|
|
0x03
|
|
|
|
|
|
Ş |
ç |
ş
|
0x04
|
|
^ |
|
|
|
|
|
|
0x05
|
|
|
|
|
|
|
€ |
|
0x06
|
|
|
|
|
|
|
|
|
0x07
|
|
|
|
|
ГРАММ |
|
грамм |
|
0x08
|
|
|
{ |
|
|
|
|
|
0x09
|
|
|
} |
|
Я |
|
я |
|
0x0A
|
FF |
|
|
|
|
|
|
|
0x0B
|
|
SS2 |
|
|
|
|
|
|
0x0C
|
|
|
|
[ |
|
|
|
|
0x0D
|
CR2 |
|
|
~ |
|
|
|
|
0x0E
|
|
|
|
] |
|
|
|
|
0x0F
|
|
|
\ |
|
|
|
|
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык урду (арабский и базовые латинские шрифты)
Он также может использоваться для языка синдхи, также написанного арабским шрифтом.
Иногда его можно использовать и для арабского языка , но восточные цифры (закодированные здесь в их персидско-индуистском варианте) не будут использоваться в этом случае, потому что стандартный арабский язык предпочитает свои традиционные восточно-арабские цифры и часто будет заменен западными. Арабские цифры (закодированные в блокирующем наборе символов сдвига в столбце 0x30), которые теперь также часто используются в урду. Однако в Индии телефоны, распознающие обозначение арабского языка, могут заменять персидско-индуистские варианты восточно-арабских цифр традиционными восточно-арабскими цифрами.
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык хинди (деванагари и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Бенгальский и ассамский языки (бенгали и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык пенджаби (гурмухи и базовые латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык гуджарати (гуджарати и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык ория (ория и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Тамильский язык (тамильский и базовый латинский алфавит)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Телугу (телугу и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык каннада (каннада и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Язык малаялам (малаялам и основные латинские шрифты)
-
LF - это элемент управления переводом строки.
-
CR - это элемент управления возврата каретки или заполнитель.
-
ESC - это элемент управления Escape.
-
SP - это космический персонаж.
|
-
FF - это элемент управления разрывом страницы. Если не распознан, он будет рассматриваться как LF .
-
CR2 - это управляющий символ. В этой позиции нельзя кодировать языковые символы.
-
SS2 - это второй элемент управления Single Shift Escape, зарезервированный для будущих расширений.
|
Смотрите также
использованная литература
внешние ссылки