2013-08-07 22 views
2

來自pymongo文檔:如何讓pymongo始終返回str而不是unicode?

MongoDB以BSON格式存儲數據。 BSON字符串是UTF-8編碼,所以PyMongo必須確保 它存儲的任何字符串只包含有效的UTF-8數據。常規字符串()被驗證並保存不變。 Unicode字符串()首先被編碼爲UTF-8。 >「而不是 ‘邁克’我們例子字符串在Python殼爲代表的u'Mike的原因是PyMongo每個BSON字符串爲Python unicode字符串,而不是常規 海峽解碼。」

它對我來說似乎有點傻,數據庫只能存儲UTF-8編碼的字符串,但pymongo中的返回類型是unicode,這意味着我必須處理來自文檔的每個字符串的第一件事情是再次調用encode('utf- 8'),有沒有辦法解決這個問題,比如告訴pymongo不要給我unicode而只是給我原始的str?

+0

你爲什麼要這麼做? – RickyA

+1

我正在處理幾個僅適用於編碼字符串的庫,例如bcrypt。很高興能夠向我的項目開發人員保證,他們所使用的所有數據都將是字符串,而不必添加大量的類型檢查。 – zjm555

+0

問題出在「只是原始的大聲」。由於它是unicode,因此可能有那些不能表示爲str的字符。所以一個lib級別的轉換是不可行的。我只想告訴你的開發者,他們將得到的所有東西都是「」,並且他們必須將其轉換......這也爲您節省了不必要轉換的開銷。 – RickyA

回答

1

不,PyMongo沒有這樣的功能;從BSON解碼的每個字符串都是解碼爲UTF -8。根據Python版本,Python在內部將字符串表示爲UCS-2或其他格式。請參閱code where the BSON decoder extracts a string

在即將發佈的PyMongo 3.x系列中,我們可能會添加更靈活的BSON解碼功能,以便開發人員優化不常見的用例。

相關問題