我有一个相当大的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 ID替换它们。
这个问题肯定很常见...如何处理这个问题的最佳实践是什么?我希望有一个解决方案,可以继续使用普通的“print”方法,但必要时可以修改所有出现的情况。
附言:我现在已经解决了这个问题。 解决方案既不是给出的任何答案。我使用了http://wiki.python.org/moin/PrintFails上ChrisJ在其中一个评论中提供的方法,即将sys.stdout替换为调用正确参数的unicode编码的包装器。效果非常好。