用Python插入MongoDB时的编码问题

3 投票
2 回答
8162 浏览
提问于 2025-04-17 11:06

我有一个字典的列表 data_dump,里面包含像这样的字典:

d = {"ids": s_id, "subject": subject}

我正在跟着教程尝试进行批量插入:

connection = Connection(host,port)
db = connection['clusters']
posts = db.posts
posts.insert(data_dump)

但是出现了以下错误:

 File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 312, in insert
continue_on_error, self.__uuid_subtype), safe)
bson.errors.InvalidStringData: strings in documents must be valid UTF-8

请给点建议。谢谢!

2 个回答

0

我不想丢失那些不是utf-8格式的字符。所以我选择把字符串转换成二进制格式。

根据你的例子,

>>> print subject
u'Math'
>>> d = {"ids": s_id, "subject": bson.Binary(str(subject))} # convert subject from unicode to Binary

你不能进行全文搜索,这是Mongo最新的功能,但对于其他所有事情来说,这种方法都很好用。

3

解决办法: 好吧.. 我通过以下方式强制转换编码: 1) 先把字符串里的符号等去掉 然后 2) 先用 raw.decode('ascii') 把 ASCII 转换成 UTF-8,然后再用 decoded_string.encode('utf8') 转换成 UTF-8 谢谢大家.. :)

撰写回答