mongodb 插入显示 '文档中的字符串必须是有效的 UTF-8

2 投票
1 回答
7230 浏览
提问于 2025-04-17 22:47

这是我的代码

        for code, data in dict_data.items(): 

            try:
                collection2.insert({'_id':code,'data':data})

            except Exception as e:
                print code,'>>>>>>>', str(e)
                sys.exit()

它退出时显示了

         524715 >>>>>>> strings in documents must be valid UTF-8

我只能通过尝试和捕获的方法找到错误。dict_data是一个很大的字典,里面包含了从其他集合计算出来的值。

我该怎么修复这个问题呢?

谢谢

1 个回答

4

如果你在用PyMongo和Python 2.x,记得要使用utf-8编码的字符串或者unicode字符串。你可以参考这个链接了解更多:http://api.mongodb.org/python/current/tutorial.html#a-note-on-unicode-strings

如果data是一个包含多个字符串的字典,你可以用下面的函数把它们全部转换成unicode:

def convert2unicode(mydict):
    for k, v in mydict.iteritems():
        if isinstance(v, str):
            mydict[k] = unicode(v, errors = 'replace')
        elif isinstance(v, dict):
            convert2unicode(v)

for code, data in dict_data.items(): 
    try:
        convert2unicode(data)
        collection2.insert({'_id':code,'data': data})
    except Exception as e:
        print code,'>>>>>>>', str(e)
        sys.exit()

上面的代码会把所有的字符串值转换成unicode,而“键”则保持不变。根据具体情况,你可能还需要把“键”也转换一下。

撰写回答