У меня довольно большое приложение python 2.6 с большим количеством операторов печати. Я использую строки unicode на всем протяжении, и это обычно отлично работает. Однако, если я перенаправляю вывод приложения (например, "myapp.py > output.txt" ), я иногда получаю такие ошибки:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128)
Я думаю, эта же проблема возникает, если кто-то установил LOCALE в ASCII. Теперь я прекрасно понимаю причину этой ошибки. В моих строках Unicode есть символы, которые невозможно закодировать в ASCII. Справедливо. Но я бы хотел, чтобы моя программа python прилагала все усилия, чтобы попытаться напечатать что-то понятное, возможно, пропустив подозрительные символы или заменив их идентификаторами Unicode.
Эта проблема должна быть общей... Какова наилучшая практика для решения этой проблемы? Я бы предпочел решение, которое позволяет мне использовать обычную старую "печать", но при необходимости я могу изменить все вхождения.
PS: Я решил эту проблему. Решение не было ни одним из ответов. Я использовал метод, приведенный в http://wiki.python.org/moin/PrintFails, как указано ChrisJ в одном из комментариев. То есть, я заменю sys.stdout на оболочку, которая вызывает кодировку unicode с правильными аргументами. Очень хорошо работает.