二进制文本编码,非打印字符,协议缓冲区,mongodb和bson

Has*_*yed 5 c++ character-encoding protocol-buffers mongodb bson

我有一个候选键(mongodb候选键,__ id)在协议缓冲区中看起来如下:

message qrs_signature
{
  required uint32    region_id = 1;
  repeated fixed32 urls = 2;
};
Run Code Online (Sandbox Code Playgroud)

当然,我不能ParseToString(std::string)在我的bson文档中使用协议缓冲区编码的字符串(via ),因为它可以包含非打印字符.因此,我使用ascii85编码来编码数据(使用此库).我有两个问题.

  1. 是b85编码bson安全.
  2. 什么是bson的二进制类型?有什么方法可以使用mongodb API调用将我的(二进制)字符串植入该字段,或者它只是语法糖来表示需要以某种形式处理的值类型(--ie,而不是本机mongodb实体)?

编辑

append binaryAPI的节目的数据被编码为十六进制(OMG!),base85因此更节省空间(每个记录22个字节在我的情况).

Rem*_*iet 4

  1. BSON 安全,是的。ASCII85编码的输出也是有效的utf-8 iirc。
  2. 它用于存储二进制数据块。二进制数据是官方支持的类型,您应该能够使用适当的驱动程序代码(在您的情况下为 BSONObj)将二进制值推送到 BSON 字段。有关详细信息,请参阅驱动程序文档或源代码。