Mat*_*erg 19 python linux unicode encoding locale
我有一个相当大的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)
Run Code Online (Sandbox Code Playgroud)
我想如果有人将他们的LOCALE设置为ASCII,就会出现同样的问题.现在,我完全理解这个错误的原因.我的Unicode字符串中有一些字符无法用ASCII编码.很公平.但我希望我的python程序尽最大努力尝试打印可理解的东西,可能会跳过可疑字符或用Unicode ID替换它们.
这个问题必须是常见的......处理这个问题的最佳做法是什么?我更喜欢一种允许我继续使用普通旧"打印"的解决方案,但我可以根据需要修改所有实例.
PS:我现在已经解决了这个问题.解决方案既不是给出的答案.我使用了http://wiki.python.org/moin/PrintFails中给出的方法,由ChrisJ在其中一条评论中给出.也就是说,我用一个使用正确参数调用unicode编码的包装器替换sys.stdout.效果很好.
Tri*_*ych 18
如果要转储到ASCII终端,请使用手动编码unicode.encode,并指定应忽略错误.
u = u'\xa0'
u.encode('ascii') # This fails
u.encode('ascii', 'ignore') # This replaces failed encoding attempts with empty string
Run Code Online (Sandbox Code Playgroud)
如果要存储unicode文件,请尝试以下操作:
u = u'\xa0'
print >>open('out', 'w'), u # This fails
print >>open('out', 'w'), u.encode('utf-8') # This is ok
Run Code Online (Sandbox Code Playgroud)
我现在已经解决了这个问题.解决方案既不是给出的答案.我使用了http://wiki.python.org/moin/PrintFails中给出的方法,由ChrisJ在其中一条评论中给出.也就是说,我用一个使用正确参数调用unicode编码的包装器替换sys.stdout.效果很好.