1Protocol Buffers 不会将字符串编码为 UTF-8,而是将其编码为普通字节。虽然没有“普通字节”编码方式,但有 UTF-8 编码方式,它指定了如何将字符串编码为“普通字节”。 - Alex Che
1尽管协议缓冲区在传输时以相同的方式表示字符串和字节,但仍然明确指定了如何将 string 字段编码为字节:字符串必须始终包含 UTF-8 编码或 7 位 ASCII 文本。换句话说,您可以手动将字符串编码为字节,并使用任何编码。但是,如果您使用目标语言的标准协议缓冲区生成的 string 访问器,则编码将为 UTF-8/7 位 ASCII。 - Alex Che
1@Clarus 我不认为我会混淆它。实际上,我已经在我的评论中说明了协议中没有区分字符串和字节。但是,来自Google的protobuf规范明确指出字符串必须使用UTF-8 / 7位ASCII进行编码。也就是说,这不是偶然的,而是一个明确的要求。因此,如果您希望您的字符串与其他protobuf绑定实现兼容,那么您必须遵守这种编码方式。是的,您可以手动编码不同编码的字符串,但这样它就不符合Google对protobuf字符串的定义了。 - Alex Che
string
字段编码为字节:字符串必须始终包含 UTF-8 编码或 7 位 ASCII 文本
。换句话说,您可以手动将字符串编码为字节,并使用任何编码。但是,如果您使用目标语言的标准协议缓冲区生成的string
访问器,则编码将为 UTF-8/7 位 ASCII。 - Alex Che