c++ - 二进制到文本编码、非打印字符、 Protocol Buffer 、mongodb 和 bson

标签 c++ mongodb character-encoding protocol-buffers bson

我有一个候选键(mongodb 候选键,__id),它在 Protocol Buffer 中如下所示:

message qrs_signature
{
  required uint32    region_id = 1;
  repeated fixed32 urls = 2;
};

当然,我不能在我的 bson 文档中使用 Protocol Buffer 编码字符串(通过 ParseToString(std::string)),因为它可以包含非打印字符。因此,我使用 ascii85 编码对数据进行编码(使用 this library )。我有两个问题。

  1. b85 编码是否安全。
  2. 什么是bson's binary type for ?有什么方法可以使用 mongodb API 调用将我的(二进制)字符串植入到该字段中,还是只是语法糖来表示需要以某种形式处理的值类型(即,不是 native MongoDB实体)?

编辑

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

最佳答案

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

关于c++ - 二进制到文本编码、非打印字符、 Protocol Buffer 、mongodb 和 bson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988849/

相关文章:

c++ - 如何将variant <Ts…>的值移动到variant <T,Ts…>中?

c++ - Tcl_LinkVar 和 Tcl_UpdateLinkedVar 没有更新我的 TCL 变量

mongodb - 使用 $elemMatch 更新 mongodb 嵌入式文档

node.js - Nodejs MongoDb 异步回调

phpmyadmin 将日文字符显示为一堆问号,即使我将字符集和排序规则设置为 utf8_unicode_ci

c++ - 指向虚函数的指针与指向非虚函数的指针有何不同?

c# - 带有聚合管道的 MongoDB C# 驱动程序更新文档

encoding - UTF-8 现在是非 ASCII 字符二维码的首选编码吗?

unix - unix 的字符串命令如何工作?

C++使用endl时运行错误