Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux/Python:为打印编码unicode字符串_Python_Linux_Unicode_Encoding_Locale - Fatal编程技术网

Linux/Python:为打印编码unicode字符串

Linux/Python:为打印编码unicode字符串,python,linux,unicode,encoding,locale,Python,Linux,Unicode,Encoding,Locale,我有一个相当大的Python2.6应用程序,其中散布了许多打印语句。我一直在使用unicode字符串,通常效果很好。但是,如果重定向应用程序的输出(如“myapp.py>output.txt”),则偶尔会出现如下错误: UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128) 我想如果有人将其区域设置设置为ASCII,也会出现同样的问题。现在

我有一个相当大的Python2.6应用程序,其中散布了许多打印语句。我一直在使用unicode字符串,通常效果很好。但是,如果重定向应用程序的输出(如“myapp.py>output.txt”),则偶尔会出现如下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128)
我想如果有人将其区域设置设置为ASCII,也会出现同样的问题。现在,我完全理解这个错误的原因。我的Unicode字符串中有一些字符无法用ASCII编码。很公平。但是我希望我的python程序尽最大努力打印一些可以理解的内容,可能跳过可疑字符,或者用Unicode ID替换它们

这个问题一定很普遍。。。处理此问题的最佳做法是什么?我更喜欢一个解决方案,允许我继续使用普通的旧“打印”,但如果需要,我可以修改所有出现的内容


PS:我现在已经解决了这个问题。解决方案不是给出的两个答案。我使用了在中给出的方法,正如ChrisJ在其中一条评论中给出的那样。也就是说,我将sys.stdout替换为使用正确参数调用unicode编码的包装器。非常好。

如果要转储到ASCII终端,请使用
unicode手动编码。编码
,并指定应忽略错误

u = u'\xa0'
u.encode('ascii') # This fails
u.encode('ascii', 'ignore') # This replaces failed encoding attempts with empty string
如果要存储unicode文件,请尝试以下操作:

u = u'\xa0'
print >>open('out', 'w'), u # This fails
print >>open('out', 'w'), u.encode('utf-8') # This is ok

通过执行任意unicode->utf8转换的方法包装所有打印语句,或者作为最后手段,在site.py中将Python默认编码从ascii更改为utf-8。一般来说,将未经筛选的unicode字符串打印到sys.stdout是个坏主意,因为Python将触发unicode字符串到配置的默认编码(ascii)的隐式转换

我现在已经解决了这个问题。给出的两个答案都不是解决方案。我使用了在中给出的方法,正如ChrisJ在其中一条评论中给出的那样。也就是说,我将sys.stdout替换为使用正确参数调用unicode编码的包装器。非常好。

ASCII语言环境如何?这里有两个可能重复的指针,可能会很有用:-我在给出的页面上没有看到任何注释。你能在这里复制你的解决方案吗?