java 中的编码字符串长度

Bencoded string length in java

我对 bencoding 有点困惑。

根据规范,当我对字符串进行编码时,我需要使用以下格式:

长度:字符串

字符串 spam 变为 4:spam

我的问题:4 是编码字符串的符号数量,还是 utf-8 字节的数量?

例如,如果我要对字符串进行编码 gâteau

该字符串的长度应指定为多少?

我想我必须指定7,最后的形式应该是7:gâteau

因为符号â按照utf-8编码占用2个字节,而该字符串中其余所有符号按照utf-8编码占用1个字节。

另外我听说不建议在 java String 实例中存储编码数据。

换句话说,当我对数据块进行编码时,我应该将其存储为字节数组而不应将其转换为 java 字符串值以避免编码问题。

我的假设是否正确?

According to the specification,编码后的字符串是一个字节序列,你必须指定这个序列的字节数作为它的长度。

并且,根据规范:“所有字符串值均采用 UTF-8 编码”。

对于 "gâteau" 的情况,您应该指定 7 作为长度,因为字符 â 占用 2 个字节。