我有一个相当大的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。
这个问题一定很普遍。解决这个问题的最佳实践是什么?我希望可以继续使用普通的旧“打印”的解决方案,但如有必要,我可以修改所有出现的情况。
PS:我现在已经解决了这个问题。 解决方案都不是给出的答案。我使用了http://wiki.python.org/moin/PrintFails中给出的方法,该方法是ChrisJ在其中一项注释中给出的。也就是说,我将sys.stdout替换为一个包装器,该包装器使用正确的参数调用unicode编码。效果很好。
我现在已经解决了这个问题。解决方案都不是给出的答案。我使用了http://wiki.python.org/moin/PrintFails中给出的方法,该方法是ChrisJ在其中一项注释中给出的。也就是说,我将sys.stdout替换为一个包装器,该包装器使用正确的参数调用unicode编码。效果很好。