◐ Shell
clean mode source ↗

Message 205654 - Python tracker

> And yet, in Python 2, people could do that, and Python didn't care.
> *That's* the regression I'm worried about. If it hadn't round-tripped
> cleanly in Python 2, I wouldn't care here either.

$ python2.7 -c "print u'\u20ac'"
€
$ LANG=C python2.7 -c "print u'\u20ac'"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128)

And even worse:

$ python2.7 -c "print u'\u20ac'" >/dev/null
Traceback (most recent call last):
  File "<string>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128)

What the wart!

Other program can produces wrong (or even absolutely senseless) output with C locale.

$ LANG=C ls
???????????? ????????????????                                      ???????????????????? ??????????
?????????? ??????????????                                          ?????????????? ????????????????????????
?????????? ????????                                                ???????????? ??????????????
?????????????? ??????????????????                                  ???????? ????????????????????

What is better, silently produce corrupted output or raise an exception? If first, then let just set the "replace" or "backslashreplace" error handler for sys.stdout by default.