Protobuf字符串到可读字符串?

Posted

技术标签:

【中文标题】Protobuf字符串到可读字符串?【英文标题】:Protobuf string to readable string? 【发布时间】:2020-05-15 08:28:51 【问题描述】:

我在客户端服务器 WCF 解决方案中使用 protobuf,我需要尽可能高效地将消息(参数)的内容记录到文件中(避免大量的序列化和反序列化)。

在 IClientMessageInspector 中,我收到原始消息,但在大多数消息中都有一个不可读的 Protobuf 字符串。即使我对它进行base64decode,它也可能仍然不可读。那么有没有一种简单有效的方法可以将这个 profostring 转换成可读的东西,我可以记录到文件中?

问候

【问题讨论】:

【参考方案1】:

您无法为 任意 protobuf 有效负载创建有意义且准确的文本表示,因为二进制编码本身是模棱两可和重载的 - 完全相同的二进制可能意味着许多不同取决于所使用的模式的事情(模式隐含在类型模型中,在 protobuf-net 的情况下,来自问题中的标签)。

如果您知道架构/类型,最好的办法是将 protobuf 有效负载反序列化为类型,然后通过您首选的 json / xml 运行该类型/yaml/csv/任何序列化程序,并记录那个

如果您只需要记录字节以用于审计目的:base-64 应该就足够了,但同样:如果没有上下文,它将毫无意义。

【讨论】:

以上是关于Protobuf字符串到可读字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 3 中腌制和取消腌制到可移植字符串

管道传输到可写流时暂停可读流

Protobuf:C++ 字符串,里面有空字符

字节到可读格式(字节kbmb等)

VC++基于微软语音引擎开发语音识别总结

使用协议缓冲区/Protobuf 的 PInvoke 通用字符串格式