[Python-Dev] Use our strict mbcs codec instead of the Windows ANSI API

Victor Stinner victor.stinner at haypocalc.com
Wed Oct 26 10:52:16 CEST 2011


Le Mardi 25 Octobre 2011 10:31:56 Victor Stinner a écrit :
>> Basically, all functions processing filenames, so most functions of 
>> posixmodule.c. Some examples:
>> 
>> - os.listdir(): FindFirstFileA, FindNextFileA, FindCloseA
>> - os.lstat(): CreateFileA
>> - os.getcwdb(): getcwd()
>> - os.mkdir(): CreateDirectoryA
>> - os.chmod(): SetFileAttributesA
>> - ...


> This seems way too broad. 

I changed my mind about this list: I only want to change how filenames are 
encoded, not how filenames are decoded. So only os.listdir() & os.getcwdb() 
should be changed, as I wrote in another email in this thread and in the issue 
#13247.

>> - os.getcwdb():
> This you might change.

Issue #13247 combines os.getcwdb() and os.listdir(). Read the issue for more 
information.

> It ('?') is a bad choice of signal though, given the other uses
> of '?' in paths.

If I understood correctly, '?' is a pattern to match any character in 
FindFirstFile/FindNextFile. Python cannot configure the replacement character, 
it's hardcoded to "?" (U+003F).

> it's just
> standard Windows behavior, which results in pathnames that are
> perfectly acceptable to Windows APIs, but unreliable in use because
> they have different semantics in different Windows APIs.

I think that such filenames cannot be used with any Windows function accessing 
to the filesystem. Extract of the issue:

"Such filenames cannot be used, open() fails with OSError(22, "invalid 
argument: '?'") for example."

You can only be used if you want to display the content of a directory, but 
don't expect to be able to read file content.

--

Anyway, you must use Unicode on Windows! The bytes API was just kept for 
backward compatibility.

Victor


More information about the Python-Dev mailing list