将字节字符串插入MongoDB

时间:2013-03-27 12:48:05

标签: python mongodb

我需要插入一些字节串。

> db.test2.t.insert({'e': '\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe'})
> db.test2.t.insert({'e': '\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe'})
> db.test2.t.find()
{ "_id" : ObjectId("5152e927d50568b4a9b56cdd"), "e" : " Çeê\u0014¾g·ßÊgFNø\u0013¾" }
{ "_id" : ObjectId("5152e9e9d50568b4a9b56cde"), "e" : " Çeê\u0014¾g·ßÊgFNø\u0013¾" }

我无法在Python中读取相同的字节串:

>>> e =  " Çeê\u0014¾g·ßÊgFNø\u0013¾"
>>> e
'\xc2\xa0\xc3\x87e\xc3\xaa\\u0014\xc2\xbeg\xc2\xb7\xc3\x9f\xc3\x8agFN\xc3\xb8\\u0013\xc2\xbe'
>>> g =  b'\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe'
>>> g
'\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe'

感谢。


编码为utf8

>>> u'\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe'.encode('utf8')
'\xc2\xa0\xc3\x87e\xc3\xaa\x14\xc2\xbeg\xc2\xb7\xc3\x9f\xc3\x8agFN\xc3\xb8\x13\xc2\xbe'

当我插入时,我正在

{ "_id" : ObjectId("5152ee3ad50568b4a9b56ce0"), "e" : " Ãeê\u0014¾g·ÃÃgFNø\u0013¾" }

但是当我用utf8解码时,

u'\xc2\xa0\xc3\x87e\xc3\xaa\\u0014\xc2\xbeg\xc2\xb7\xc3\x9f\xc3\x8agFN\xc3\xb8\\u0013\xc2\xbe'

这就是我投入的内容。太棒了。但是如何解码回原来的?

1 个答案:

答案 0 :(得分:0)

使用Binary类型:

> db.test.t.insert({'e': BinData(0, 'oMdl6hS+Z7ffymdGTvgTvg==')})
WriteResult({ "nInserted" : 1 })
> db.test.t.insert({'e': BinData(0, 'oMdl6hS+Z7ffymdGTvgTvg==')})
WriteResult({ "nInserted" : 1 })
> db.test.t.find()
{ "_id" : ObjectId("56e4a1d51b696fa210e6d074"), "e" :     BinData(0,"oMdl6hS+Z7ffymdGTvgTvg==") }
{ "_id" : ObjectId("56e4a1d71b696fa210e6d075"), "e" :     BinData(0,"oMdl6hS+Z7ffymdGTvgTvg==") }

来自Python:

>>> cli.test.test.t.find()
[{u'_id': ObjectId('56e4a1d51b696fa210e6d074'), u'e': Binary('\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe', 0)}, 
 {u'_id': ObjectId('56e4a1d71b696fa210e6d075'), u'e': Binary('\xa0\xc7e\xea\x14\xbeg\xb7\xdf\xcagFN\xf8\x13\xbe', 0)}]