Thank you Michael, my locale is UTF-8 when I get the error
$ locale LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" ... LC_ALL=en_US.UTF-8 python v3 works ok though Vasilis ________________________________________ From: Tkinter-discuss [tkinter-discuss-bounces+vasilis.vlachoudis=cern...@python.org] on behalf of Michael Lange [klappn...@web.de] Sent: Thursday, February 15, 2018 20:32 To: tkinter-discuss@python.org Subject: Re: [Tkinter-discuss] listdir Hi, On Thu, 15 Feb 2018 10:24:10 +0000 Vasilis Vlachoudis <vasilis.vlachou...@cern.ch> wrote: > Hi all, > > I know that it it is not related to tkinter, but I had troubles in > submitting in the general python list. > > I was trying to make my custom FileDialog to handle unicode filenames > and I stuck with the following behavior (python v2.7) > > #path = "/home/bnv/Download" > path = u"/home/bnv/Download" > for fn in os.listdir(path): > print(fn,type(fn)) > fullpath = os.path.join(path, fn) > > If the "path" is defined as unicode I get the following output and error > (u'foo.py', <type 'unicode'>) > ('Gewu\xccrzhalter.Part1.nc', <type 'str'>) > Traceback (most recent call last): > File "foo.py", line 20, in <module> > filename = os.path.join(path, fn) > File "/usr/lib/python2.7/posixpath.py", line 73, in join > path += '/' + b > UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 5: > ordinal not in range(128) > > While if the "path" is defined as str. I get > ('foo.py', <type 'str'>) > ('Gewu\xccrzhalter.Part1.nc', <type 'str'>) > > I don't understand why if the path is unicode the output of listdir is > unicode the filenames containing only ascii and str for the file with > the non-ascii character. While if the path is str, all output is in str I think this is because with "foo.py" no UnicodeError occurs and so the str->unicode conversion succeeds. I can only guess why that UnicodeError occurs though, this doesn't happen here. When I do $ export LANG=C before starting the python interpreter however I get this same error as you (by default I have UTF-8 here). So I think maybe your system default encoding is set to something that does not support the non-ascii character in the filename which causes the problem. This might also explain why the default tk file dialogs do not seem to work for you (they work well here with unicode filenames). Just a guess, of course. Best regards Michael .-.. .. ...- . .-.. --- -. --. .- -. -.. .--. .-. --- ... .--. . .-. If a man had a child who'd gone anti-social, killed perhaps, he'd still tend to protect that child. -- McCoy, "The Ultimate Computer", stardate 4731.3 _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss