我想在MongoDB领域存储非英语(如:孟加拉语,印地语)数据。
This is my approach:-
import pymongo
from pymongo import MongoClient
client = MongoClient()
db = client.testdb
db['testing'].save({'data':'শুভ নববর্ষ'})
我有一个例外。 异常值:第5行的文件/test/views.py中的非ASCII字符'\ xe0',但未声明编码;有关详细信息,请参阅http://www.python.org/peps/pep-0263.html(views.py,第5行)
之后我尝试过这样: -
from bson import BSON
bson_string = BSON.encode({'data':'শুভ নববর্ষ'})
db['testing'].save({'data':'শুভ নববর্ষ'})
这次我也遇到了同样的错误。
编辑: -
基本上我无法在print 'শুভ নববর্ষ'
IDLE
>>>print 'শুভ নববর্ষ'
Unsupported characters in input
1ST EDIT
: - 我在views.py中添加了# -*- coding: utf-8 -*-
,然后能够以某种方式存储数据。
但是这个对象结构与mongodb中的普通数据结构不同。
如: -
> db['testing'].find()
{ষ" } : ObjectId("52d65a50012bad0b23c13a65"), "data" : "শà§à¦ নববরà
I have added another record.
>db['testing'].save({'data':'kousik chowdhury'})
Now the collection is looking funny.
> db['testing'].find() ষ" }
{ "_id" : ObjectId("52d65e6a012bad0a39a2685b"), "data" : "kousik chowdhury" }¦°à§
> db['testing'].find().length()
2
** I am using PuTTY as a editor.
>>> a = db['testing'].find()[0]
>>> a
{u'_id': ObjectId('52d65a50012bad0b23c13a65'), u'data': u'\u09b6\u09c1\u09ad\u09a8\u09ac\u09ac\u09b0\u09cd\u09b7'}
>>> mydata = a['data']
>>>mydata
u'\u09b6\u09c1\u09ad \u09a8\u09ac\u09ac\u09b0\u09cd\u09b7'
>>>mydata.encode('utf-8')
'\xe0\xa6\xb6\xe0\xa7\x81\xe0\xa6\xad \xe0\xa6\xa8\xe0\xa6\xac\xe0\xa6\xac\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xb7'
是否有任何标准流程,以便我能以正确的格式将其存储在mongodb中并获取数据?
答案 0 :(得分:3)
你有线:
# -*- coding: <encoding name> -*-
在您的文件开头? 例如:
# -*- coding: utf-8 -*-
第2部分:
保存数据使用unicode前缀(u'')
假设你想做一个['data'] .coding('utf-8')它可以正常工作 - 只是
打印['数据'] .coding('utf-8')
提示:从来没有一个很好的理由来覆盖具有某种价值的基本类型......(我的意思是str ='')
答案 1 :(得分:1)
这适用于我在Mac上的iTerm:
# -*- coding: utf-8 -*-
from pymongo import MongoClient
db = MongoClient().test
db.test_collection.drop()
db.test_collection.save({'data': 'শুভ নববর্ষ'})
document = db.test_collection.find_one()
print document['data']
打印输出与输入匹配:শুভশুভর্ষ。
MongoDB本身希望所有文本都被编码为UTF-8,因此它支持所有unicode文本。您遇到的麻烦是在IDLE或其他任何地方检索输出时找到打印输出的方法。尝试在Windows命令提示符下运行脚本,看看输出是否正确呈现。