我有一个像下面这样的原型文件:
syntax = "proto2";
package user;
message user_message {
required bytes username = 1;
optional string phonenum = 2;
optional string password = 3;
}
当我收到消息时,它被序列化为来自发件人的字符串。
我尝试将其转换为 JSON 对象:
base_msg = msg_periodic_pb2.m_apps_message()
base_msg.ParseFromString(message)
base_msg = json_format.MessageToJson(base_msg)
当我打印 base_msg 时,将消息转换为 JSON 后,用户名将转换为 base64 字符串。我怎样才能避免这种情况?
有关 GitHub 相关问题的评论 回答了我的问题。
这种行为实际上是可以预料的,因为字节字段(与字符串字段不同)可以包含非 UTF8 二进制数据,并且由于不能直接用 JSON 表示,我们必须对其进行 base64 编码。
所以,如果你真的想要字符串。您不能将 protobuf 类型作为字节。