Issue 1541671: bsddb can't use unicode filenames (original) (raw)
with Python 2.5b3,
Here is an attempt to use a unicode filename with bsddb:
dbe = db.DBEnv() dbe.open(u'\u03b3\u03bb\u03ce\u03c3\u03c32', db.DB_CREATE | db.DB_INIT_MPOOL) Traceback (most recent call last): File "", line 1, in builtin.UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
This is on Windows XP.
Here are some indications that the underlying SleepyCat library ought to be able to do the right thing here:
http://www.sleepycat.com/xmldocs/ref/build_win/unicode.html http://www.sleepycat.com/update/4.3.29/if.4.3.29.html
Logged In: YES user_id=21627
The sleepycat Unicode build procedure is not usable for Python. The exposed API (db_open) etc. still operates on char* strings. It then internally decodes them to WCHAR_T before passing them to the Win32 API. Why they do this is beyond me; I can't see any advantage in doing so (for the users of the library, nothing changes).
It would be possible to change _bsddb to encode Unicode strings automatically with the "mbcs" codec. Not sure whether that would help in your case, as I don't know what the system ANSI code page on your installation is.