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