用Python插入MongoDB时的编码问题
我有一个字典的列表 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 谢谢大家.. :)