Статус документа
Статус документа

ГОСТ Р 58603-2019 (ИСО/МЭК 20922:2016) Информационные технологии (ИТ). Интернет вещей. Протокол организации очередей доставки телеметрических сообщений MQTT. Версия 3.1.1

     4.3 Закодированные строки UTF-8


Текстовые поля в управляющих пакетах, описанных ниже, кодируются как строки UTF-8. UTF-8 [2] - эффективный метод кодирования символов Unicode [5], который оптимизирует кодовую таблицу ASCII для поддержки обмена текстовыми сообщениями.

Каждой из этих строк предшествует префикс длиной в два байта, который определяет количество байтов в самой кодированной строке UTF-8, как приведено в таблице 1. Следовательно, существует ограничение на размер строки, которая может быть передана в одном из этих кодированных компонентов UTF-8; невозможно передать строку размером более 65535 байт.

Если не указано иное, все кодированные строки UTF-8 могут иметь любую длину в диапазоне от 0 до 65535 байт.

Таблица 1 - Структура кодированных строк UTF-8

Бит

7

6

5

4

3

2

1

0

Байт 1

Длина строки MSB

Байт 2

Длина строки LSB

Байт 3...

Данные закодированного символа UTF-8, если длина >0


Символьные данные в кодированной строке UTF-8 ДОЛЖНЫ быть правильно сформированы, как определено спецификацией Unicode [5] и подтверждено в RFC 3629 [2]. В частности, эти данные НЕ ДОЛЖНЫ включать кодовые точки между U+D800 и U+DFFF. Если Сервер или Клиент получает управляющий пакет, содержащий неправильно сформированный UTF-8, он ДОЛЖЕН прервать сетевое подключение [MQTT-4.5.3-1].

Закодированная строка UTF-8 НЕ ДОЛЖНА включать кодировку нулевого символа U+0000. Если получатель (Сервер или Клиент) получает управляющий пакет, содержащий U+0000, он ДОЛЖЕН прервать сетевое соединение [MQTT-4.5.3-2].

В данные НЕ СЛЕДУЕТ включать кодовые пункты Unicode [5], перечисленные ниже. Если получатель (Сервер или Клиент) получает управляющий пакет, содержащий любой из них, он МОЖЕТ прервать сетевое соединение:

- управляющие символы U+0001..U+001F;

- управляющие символы U+007F..U+009F;

- кодовые точки, которые согласно спецификации Unicode [5] не являются символами (например, U+0FFFF).

Кодированная UTF-8 последовательность 0xEF 0хВВ 0xBF всегда должна интерпретироваться как U+FEFF ("НЕРАЗРЫВНЫЙ ПРОБЕЛ С НУЛЕВОЙ ШИРИНОЙ"), где бы она ни появлялась в строке, и НЕ ДОЛЖНА быть пропущена или удалена получателем пакета [MQTT-1.5.3-3].

Пример - Строка А, которая представлена ЗАГЛАВНОЙ ЛАТИНСКОЙ БУКВОЙ А, за которой следует кодовая точка U+2A6D4 (представляющей ИДЕОГРАФИЧЕСКОЕ РАСШИРЕНИЕ CJK символ В), кодируется следующим образом, приведенным в таблице 2.

Таблица 2 - Пример строки в кодировке UTF-8

Бит

7

6

5

4

3

2

1

0

Байт 1

Длина строки MSB (0x00)

0

0

0

0

0

0

0

0

Байт 2

Длина строки LSB (0x05)

0

0

0

0

0

1

0

1

Байт 3

'А' (0x41)

0

1

0

0

0

0

0

1

Байт 4

(0xF0)

1

1

1

1

0

0

0

0

Байт 5

(0хАА)

1

0

1

0

1

0

1

0

Байт 6

(0x9В)

1

0

0

1

1

0

1

1

Байт 7

(0x94)

1

0

0

1

0

1

0

0