[python-win32] win32file.CreateFile versus win32file.CreateFileW

Mark Hammond skippy.hammond at gmail.com
Mon Feb 6 23:40:08 CET 2012


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 at python.org
> http://mail.python.org/mailman/listinfo/python-win32



More information about the python-win32 mailing list