UTF-8字符串分隔符

UTF-8字符串分隔符,utf-8,Utf 8,我正在解析一个二进制协议,其中UTF-8字符串散布在原始字节之间。这个特定的协议在每个UTF-8字符串的前面加上一个短的(两个字节),表示下面的UTF-8字符串的长度。这就给出了最大字符串长度2^16>65000,这对于特定应用来说已经足够了 我的问题是,这是UTF-8字符串定界的标准方法吗?我不会称之为定界,更像是“长度前缀”。一些人称之为Pascal,因为在早期,Pascal语言是一种流行的语言,它以这种方式将字符串存储在内存中 我认为没有专门针对这一点的正式标准,因为它是存储UTF-8字符

我正在解析一个二进制协议,其中UTF-8字符串散布在原始字节之间。这个特定的协议在每个UTF-8字符串的前面加上一个短的(两个字节),表示下面的UTF-8字符串的长度。这就给出了最大字符串长度2^16>65000,这对于特定应用来说已经足够了


我的问题是,这是UTF-8字符串定界的标准方法吗?

我不会称之为定界,更像是“长度前缀”。一些人称之为Pascal,因为在早期,Pascal语言是一种流行的语言,它以这种方式将字符串存储在内存中


我认为没有专门针对这一点的正式标准,因为它是存储UTF-8字符串(或任何字节字符串)的一种非常明显的方法。它被反复定义为处理包含字符串的消息的许多标准的一部分。

UTF8通常不受限制,您应该能够使用这里提到的规则发现其中的多字节字符:

我将使用以0x11开头的分隔符。。。。。。 但是,如果发送原始字节,则必须从处理的数据\消息中排除此分隔符,这意味着如果存在类似于此分隔符的用户输入,则必须对其进行转换


如果用户输入任何utf8表示的字符,您只需按原样发送即可。

如果您已经有了长度,为什么需要一个分隔符?是的,我使用术语“分隔符”时太随意了——我将其与术语“长度前缀”互换,因为在这种情况下,它们提供了等效的功能,但分隔符实际上只指终止字符。”“一遍又一遍的定义”是我想听到的:)谢谢!