No. That's because POSIX demands that the locale is set to C and that implies ASCII. However the locale only controls messages, it should not define anything about filesystem encodings. I wrote about this recently: http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/
How is that related to Python at all? I mean, you're opening a text file without explicitly specifying an encoding. The only reason you think it "works" on 2 is because it doesn't actually open files in text mode. (In fact, is that even possible without using the backported io module or writing a custom wrapper?)
I assume you have no idea what you are talking about.
I mean, you're opening a text file without explicitly specifying an encoding. The only reason you think it "works" on 2 is because it doesn't actually open files in text mode. (In fact, is that even possible without using the backported io module or writing a custom wrapper?)
If you open a file in text mode in Python 2 you open it to return bytes. If you open a file in text mode in Python 3 the interpreter will ask the environment what the encoding is. Which it turns out, is a pretty terrible idea. You should be explicit. Unfortunately there are cases now in Python 3 where you cannot be explicit because the interpreter already "solved" the problem for you. Incorrectly.
If you open a file in text mode in Python 2 you open it to return bytes.
That makes no sense. If it returns bytes, then it's in binary mode. If it were in text mode, it'd return unicode objects. (And please don't say that the difference between "text" and "binary" is solely whether the CRLF-to-LF conversion is enabled or not.)
Unfortunately there are cases now in Python 3 where you cannot be explicit
open has a keyword argument encoding. You can always be explicit.
That does not change that this is how the default API in Python 2 works. It's by far not the only API to open files in 2.x. That however was not the point.
open has a keyword argument encoding. You can always be explicit.
a) people are not. b) not every api supports that. Case in point: filenames, environment variables and argv.
5
u/mitsuhiko Flask Creator May 26 '14
Or you don't pass any ascii characters. Try opening an non ascii file and start your application through upstart for instance.