格式约定

Bits

一个字节中位标记为7到0。第7位是最高有效位,第0位是最低有效位。

整数型数据值 Integer data values

整数型数据值的大端顺序是16位:高位字节在低位字节之前。也就是说,一个16位的字在网络上先显示最高有效字节(MSB),然后才会出现最低有效字节(LSB)。

UTF-8编码的字符串 UTF-8 encoded strings

后文会描述的控制报文中的文本字段编码是UTF-8格式的字符串。UTF-8[RFC3629]是一个高效的Unicode[Unicode]字符编码格式,为了支持基于文本的通信,它对ASCII字符的编码做了优化。

每一个字符串都有一个两字节长度的字段作为前缀,它给出这个UTF-8编码字符串的字节数,如图1.1 UTF-8编码字符串的结构 中所示。因此使用UTF-8编码传送的字符串有一个大小限制,编码不能超过65535个字节。

除非另有说明,否则所有的UTF-8编码字符串的长度都必须在0到65535字节这个范围内。

图1.1 UTF-8编码字符串的结构

位 Bit76543210byte 1字符串长度的最高有效字节(MSB)byte 2字符串长度的最低有效字节(LSB)字节 3 …如果长度大于0,这里是UTF-8编码的字符数据

UTF-8编码的字符串不能包含空字符 U+0000。如果接收端(客户端或服务端)收到了一个包含U+0000的控制报文,它必须关闭网络连接[MQTT-1.5.3-2]

数据中不应该包含下面这些[Unicode]代码点code points的编码。如果一个接收端(服务端或客户端)收到了包含下列任意字符的控制报文,它就可以关闭网络连接:

  • U+0001...U+001F 控制字符

  • U+007F...U+009F 控制字符

  • [Unicode] 规范中定义的非字符代码点(例如U+0FFFF)

UTF-8编码序列0XEF 0xBB 0xBF总是被解释为 U+FEFF(零宽度无间隔字符),无论它出现在字符串的什么位置,报文接收端都不能跳过或者剥离它[MQTT-1.5.3-3]。

非规范示例 Non normative example

例如,字符串 A𪛔 是一个拉丁字母A后面跟着一个代码点U+2A6D4(它表示一个中日韩统一表意文字扩展B中的字符),这个字符串编码如下:

图1.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

‘A’ (0x41)

0

1

0

0

0

0

0

1

字节4

(0xF0)

1

1

1

0

0

0

0

1

字节5

(0xAA)

1

0

1

0

1

0

1

0

字节6

(0x9B)

1

0

0

1

1

0

1

1

字节7

(0x94)

1

0

0

1

0

1

0

0

编辑约定 Editing conventions

本规范用

的文本来表示

。每个一致性声明都设置了格式为

的引用。

Last updated