Как я могу преобразовать двоичные данные (тип BSON BinData: 3) в строку UTF-8? - PullRequest
1 голос
/ 30 марта 2011

У меня есть двоичные данные в Mongo, которые изначально были C # Guid:

BinData(3,"QaQPthSsOkat01BUvxApZQ==")

Я извлекаю данные с помощью драйвера Ruby из 10gen и хотел бы получить значение в виде строки.Я использую unpack и получаю то, что мне показалось массивом кодов ascii, но при ближайшем рассмотрении есть значения выше 127.

puts foo["FooID"].unpack("U*")

>> 65
>> 164
>> 15
>> 182
>> 20
>> 172
>> 58
>> 70
>> 173
>> 211
>> 80
>> 84
>> 191
>> 16
>> 41
>> 101

puts foo["FooID"].to_s.unpack("A*")

>> A???:F??PT?)e

Как мне анализировать эти данные?Есть ли опция распаковки, которую я должен использовать, или есть метод BSON, который мне нужно вызвать?

Я использую Ruby 1.9.2 и последний монго-монг из 10gen.Если вам нужны какие-либо дополнительные детали, дайте мне знать в комментариях, спасибо.

1 Ответ

1 голос
/ 30 марта 2011

A GUID / UUID - это 16-байтовое целое число, поэтому unpack('C*'), вероятно, то, что вам нужно. Однако вы должны сравнить результаты с тем, что получает C #, чтобы убедиться в правильности порядка байтов. Я предполагаю, что C # рассматривает UUID как простой список из 16 байтов, а не как большое целое число, поэтому порядок следования байтов, вероятно, не является проблемой; OTOH, лучше всего проверить и быть уверенным.

В зависимости от того, что вам нужно сделать с GUID, вам может не потребоваться распаковывать его вообще, достаточно просто обработать его как непрозрачную последовательность из 16 байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...