【发布时间】:2014-11-11 22:36:32
【问题描述】:
我使用的是 Windows 7 64 位、Python 3、MongoDB 和 PyMongo。我知道在 Python 3 中,所有字符串都是 unicode。我也知道 MongoDB 将所有字符串存储为 unicode。所以我不明白为什么,当我从数据库中提取特定字段的值为“C:\Some Folder\E=mc².xyz”的文档时,Python 将该字符串视为“C:\Some Folder\ E=mc².xyz”。它不只是那样打印; os.path.exists() 返回 False。现在,好像这还不够令人困惑,如果我将字符串保存到一个文本文件中,然后使用显式设置为“utf-8”的编码打开它,字符串就会正确显示,并且 os.path.exists()返回真。出了什么问题,我该如何解决?
编辑: 这是我刚刚编写的一些代码来演示我的问题:
from pymongo import MongoClient
db = MongoClient().test_db
orig_doc = {'string': 'E=mc²'}
_id = db.test_col.insert(orig_doc)
new_doc = db.test_col.find_one(_id)
print(new_doc['string'])
>>> E=mc²
如您所见,它完全可以正常工作!因此,我现在意识到,当我从 PostgreSQL 迁移时,我一定搞砸了。现在我只需要修复字符串。我知道这是可能的,但必须有比将字符串写入文本文件然后再读回更好的方法。我可以这样做,就像我在之前的测试中所做的那样,但这似乎不是正确的方法。
【问题讨论】:
-
你能包含一些代码吗?您似乎缺少指定编码的设置或调用。似乎没有什么问题,您只是以不正确的编码获取数据。
标签: mongodb python-3.x unicode pymongo