У меня довольно большое приложение на 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 encode с правильными аргументами. Работает очень хорошо.