[Python-Dev] PEP 383: Non-decodable Bytes in System Character Interfaces

Glenn Linderman v+python at g.nevcal.com
Wed Apr 29 14:06:57 CEST 2009

On approximately 4/29/2009 4:36 AM, came the following characters from 
the keyboard of Cameron Simpson:
> On 29Apr2009 02:56, Glenn Linderman <v+python at g.nevcal.com> wrote:
>> os.listdir(b"")
>> I find that on my Windows system, with all ASCII path file names, that I  
>> get quite different results when I pass os.listdir an empty str vs an  
>> empty bytes.
>> Rather than keep you guessing, I get the root directory contents from  
>> the empty str, and the current directory contents from an empty bytes.  
>> That is rather unexpected.
>> So I guess I'd better suggest that a specific, equivalent directory name  
>> be passed in either bytes or str form.
> I think you may have uncovered an implementation bug rather than an
> encoding issue (because I'd expect "" and b"" to be equivalent).

Me too.

> In ancient times, "" was a valid UNIX name for the working directory.
> POSIX disallows that, and requires people to use ".".
> Maybe you're seeing an artifact; did python move from UNIX to Windows or the
> other way around in its porting history? I'd guess the former.
> Do you get differing results from listdir(".") and listdir(b".") ?

No.  Both are the same as b""

> How's python2 behave for ""? (Since there's no b"" in python2.)

Python2 os.listdir("") produces the same thing as Python3 os.listdir(b"")
Python2 os.listdir(u"") produces the same thing as Python3 os.listdir("")

Another phenomenon of note:

I created a directory named ábc.  (Windows XP, Python 3.0.1, Python 
2.6.1, SetConsoleOutputCP(65001))
Python3 os.listdir(b".") prints it as b"\xe1bc"
Python2 os.listdir(".") prints it as b"\xe1bc"
Python2 os.listdir(u".") prints it as u"\xe1bc"
Python3 os.listdir(".") prints it as "bc"

Glenn -- http://nevcal.com/
A protocol is complete when there is nothing left to remove.
-- Stuart Cheshire, Apple Computer, regarding Zero Configuration Networking

More information about the Python-Dev mailing list