Python 2.7: Read File With Chinese Characters
Solution 1:
When you call decode
on a unicode
object, it first encodes it with sys.getdefaultencoding()
so it can decode it for you. Which is why you get an error about ASCII even though you didn't ask for ASCII anywhere.
So, where are you getting a unicode
object from? From askopenfilename
. From a quick test, it looks like it always returns unicode
values on Windows (presumably by getting the UTF-16 and decoding it), while on POSIX it returns some unicode
and some str
(I'd guess by leaving alone anything that fits into 7-bit ASCII, decoding anything else with your filesystem encoding). If you'd tried printing out the repr or type or anything of selectedFiles
, the problem would have been obvious.
Meanwhile, the encode('utf-8')
shouldn't cause any UnicodeError
s… but it's likely that your filesystem encoding isn't UTF-8 on Windows, so it will probably cause a lot of IOError
s with errno 2 (trying to open files that don't exist, or to create files in directories that don't exist), 21 (trying to open files with illegal file or directory names on Windows), etc. And it looks like that's exactly what you're seeing. And there's really no reason to do it; just pass the pathnames as-is to open
and they'll be fine.
So, basically, if you removed all of your encode
and decode
calls, your code would probably just work.
However, there's an even easier solution: Just use askopenfile
or asksaveasfile
instead of askopenfilename
or asksaveasfilename
. Let Tk figure out how to use its pathnames and just hand you the file objects, instead of messing with the pathnames yourself.
Post a Comment for "Python 2.7: Read File With Chinese Characters"