Python 将字节字符串插入MongoDB

Python 将字节字符串插入MongoDB,python,mongodb,Python,Mongodb,我有一些bytestring需要插入 > 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("5152e927d50568b4a9b56c

我有一些bytestring需要插入

> 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'

这是我放进去的。伟大的但是我如何解码回原始代码?

使用
二进制类型:

> 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)}]

这可能是编码问题吗?可能MongoDB使用的字符编码与Python不同。MongoDB使用UTF-8编码将字节数组存储为二进制数据。尝试将字符串编码为UTF-8。谢谢@orid我不认为我可以将其编码为utf8,因为
UnicodeDecodeError:“ascii”编解码器无法解码0位置的字节0xa0:序号不在范围(128)
。通过执行
byte\u string.encode('utf-8')
Ny bad。请参阅我的编辑。我得到了unicode码。解码时我可以看到unicode,但在应用编码之前我仍然无法返回原始字符串。您需要知道原始字符串的编码方式。