【问题标题】:How to Store different language(non english) data in MongoDB Field and retrive the same data?如何在 MongoDB 字段中存储不同语言(非英语)的数据并检索相同的数据?
【发布时间】: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


【解决方案1】:

你有线路吗:

# -*- coding: <encoding name> -*-

在文件的开头? 例如:

# -*- coding: utf-8 -*-

第 2 部分:

  • 保存数据使用 unicode 前缀 (u'')

  • 假设你想做 a['data'].encode('utf-8') 它工作正常 - 只是

    打印一个['data'].encode('utf-8')

提示:用某个值覆盖基本类型永远没有充分的理由......(我的意思是 str='')

【讨论】:

  • 我正试图在空闲时这样做。
  • 空闲基于您的 Windows 语言环境设置,无法将其更改为 utf-8... 您可以在 $python/idellib 中编辑 IOBinding.py 并强制设置编码为 utf-8 -例如在第 43 行左右...来自bytes.com/topic/python/answers/… 的解决方案但我不推荐它...它可能会影响其他一些事情...
  • 感谢您的回复。感谢您的回答。我已编辑问题,请检查。
  • 更新了我的答案,如果你得到 u'\u09b6\u09c1\u09ad \u09a8\u09ac\u09ac\u09b0\u09cd\u09b7' 将其解码为 utf-8 并打印出来
【解决方案2】:

这在 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 命令提示符下运行您的脚本,看看那里的输出是否正确呈现。

【讨论】:

  • 哦:也祝你新年快乐!
  • 我得到这个 u'\u09b6\u09c1\u09ad \u09a8\u09ac\u09ac\u09b0\u09cd\u09b7'
  • @ A. Jesse Jiryu Davis ধন্যবাদ
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多