Почему я получаю ошибку кодирования ASCII с данными Unicode в Python 2.4, но не в 2.7? - PullRequest
4 голосов
/ 25 августа 2011

У меня есть программа, которая при запуске в Python 2.7 выдает правильный вывод Unicode на стандартный вывод.При запуске в Python 2.4 я получаю UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128).Что изменилось между версией 2.4 и 2.7, что теперь это работает?

1 Ответ

7 голосов
/ 25 августа 2011

Хотя я не смог найти упоминаний об этом, хотя здесь, похоже, что Python 2.7 автоматически преобразует текст в кодировку терминала, а не выдает ошибку, как ожидалось.

Python 2.7:

> echo $LANG
en_US.UTF-8
> python -c 'import sys; print sys.getdefaultencoding()'
ascii

> python -c 'import sys; sys.stdout.write(u"\u03A3")'
Σ
> python -c 'import sys; sys.stdout.write(u"\u03A3".encode("utf8"))'
Σ

Python 2.6 (на другой коробке)

> echo $LANG
en_US.UTF-8
> python -c 'import sys; print sys.getdefaultencoding()'
ascii

> python -c 'import sys;  sys.stdout.write(u"\u03A3")'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec cant encode character u'\u03a3' in position 0: ordinal not in range(128)
> python -c 'import sys;  sys.stdout.write(u"\u03A3".encode("utf8"))'
Σ

В любом случае .encode ("utf8") в данных перед выводом должен избежать проблемы.

...