格式约定
位 Bits
Bits
一个字节中位标记为7到0。第7位是最高有效位,第0位是最低有效位。
整数型数据值 Integer data values
Integer data values
整数型数据值的大端顺序是16位:高位字节在低位字节之前。也就是说,一个16位的字在网络上先显示最高有效字节(MSB),然后才会出现最低有效字节(LSB)。
UTF-8编码的字符串 UTF-8 encoded strings
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
Editing conventions
本规范用
的文本来表示
。每个一致性声明都设置了格式为
的引用。
Last updated