【发布时间】:2011-02-24 20:21:11
【问题描述】:
我有一个相当大的 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 在其中一个 cmets 中给出的那样。也就是说,我将 sys.stdout 替换为使用正确参数调用 unicode 编码的包装器。效果很好。
【问题讨论】:
-
“ASCII”如何成为语言环境?
标签: python linux unicode encoding locale