基于 protobuf 文本格式,
bytes
字段的 protobuf 文本表示形式是按字节转义的字符串,实际上包括原始字符(包括像 $
这样的字符)和不同的转义序列的混合就像它们可能是八进制或十六进制一样:
"\n$e6b7(\215\363\267\230\020\022\rL\032\rMSE\"\rL20\001:\017@\300\213\307\370\2662H\001P\002h\006Z\234\001foobar\n\n/u/p\310\006\232\001\005"
我如何将其转换为标准输出上的原始二进制文件?
该格式使用 C 字符串转义序列。许多工具和库都可以处理这些问题,例如
echo -e
或 Python x.decode('string-escape')
。然而,不同系统中转义序列的实现方式存在细微差别,因此需要进行测试或检查以确保处理 Protobuf 标准中的每个有效序列。
因此我们可以检查 protobuf 库本身使用了什么:
CEscape
,所以人们可以期望 Abseil CUnescape
能够工作。 libprotobuf 还导出 UnescapeCEscapeString()
,这是奇怪的独立实现,但预计可以工作。