【问题标题】:UTF-8 string delimiterUTF-8 字符串分隔符
【发布时间】:2012-12-19 03:21:38
【问题描述】:

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

我的问题是,这是分隔 UTF-8 字符串的标准方式吗?

【问题讨论】:

  • 如果你已经有了长度,为什么还需要分隔符?

标签: utf-8


【解决方案1】:

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

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

【讨论】:

  • 是的,我对“分隔符”一词的使用过于宽松——我将其与“长度前缀”一词互换,因为在这种情况下它们具有相同的功能,但分隔符确实确实仅指终止字符。 “一遍又一遍地定义”是我想听到的 :) 谢谢!
【解决方案2】:

UTF8 通常不会被分隔,您应该能够使用此处提到的规则来发现其中的多字节字符:http://en.wikipedia.org/wiki/UTF-8#Description

【讨论】:

    【解决方案3】:

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

    如果用户输入任何 utf8 表示的字符,您可以直接发送它。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2017-03-04
      • 2015-01-19
      • 2021-09-08
      • 2014-03-06
      • 2016-05-31
      • 2011-09-30
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多