【发布时间】:2014-01-13 07:27:40
【问题描述】:
我想在 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 中并取回数据?
【问题讨论】:
-
您的第一种方法在我看来是正确的,并且当我尝试时它会起作用。
-
当您明确使用 unicode 字符串文字时它是否有效?例如db['testing'].save({'data':u'শুভ নববর্ষ'})
-
空闲时得到“输入中不支持的字符”
-
在您的第二个代码片段第 3 行中,我认为您的意思是使用 db['testing'].save({'data': bson_string}) ...但是,这两种方法都应该有效 -我在 python 2.7 和 3.3 中都对它们进行了测试
-
我使用的是 2.7。对我来说,我无法打印此“শুভ নববর্ষ”。空闲时出现“输入中不支持的字符”
标签: python mongodb encoding utf-8 pymongo