On 7/02/2012 2:45 AM, Scott Leerssen wrote:
I'm trying to open files with names that contain Japanese characters,
and found that win32file.CreateFile would raise an exception
indicating that 'The filename, directory name, or volume label syntax
is incorrect'.  I found win32file.CreateFileW (documented to deal
with 'unicode'), and that did return a handle for me.  What puzzles
me is that both functions take a PyUNICODE filename, so I just
assumed that CreateFile would deal with the unicode pathname I was
giving it.  So, my question is, should I just use
win32file.CreateFileW instead of win32file.CreateFile, and is it safe
to use for all file handles, including those that do not have wide
characters?

The short story is that CreateFile will take unicode strings and use the "mbcs" codec to convert them to the bytes required by CreateFile. Sadly that codec doesn't throw an error on characters that can't be converted (ie, characters outside the current code-page) - you just get a string with "?" chars in it. You could try manually doing 'filename.encode("mbcs")' and see if you get such chars. CreateFileW should be safe for any filename (although if you pass a str object to it, it will attempt to decode using mbcs - ie, the str must already be in mbcs format). As mbcs==ascii for all ascii chars, you never see the problem on filenames with only ascii chars.

Mark


Thanks, Scott _______________________________________________
python-win32 mailing list python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to