我有一个可以将unicode输出到控制台的python脚本,我想将它重定向到一个文件。显然,python中的重定向过程涉及将输出转换为字符串,因此我收到无法解码unicode字符的错误。
那么,有没有办法重定向到以UTF-8编码的文件呢?
发布于 2011-04-04 00:32:12
当打印到控制台时,Python在打印之前查看sys.stdout.encoding以确定用于编码unicode对象的编码。
将输出重定向到文件时,sys.stdout.encoding为None,因此Python2默认使用ascii编码。(相比之下,Python3默认为utf-8。)这通常会导致在打印unicode时出现异常。
您可以通过在打印前对unicode进行显式编码来避免此错误:
print (unicode_obj.encode('utf-8'))或者,您可以重新定义sys.stdout,以便所有输出都以utf-8编码
import sys
import codecs
sys.stdout=codecs.getwriter('utf-8')(sys.stdout)
print(unicode_obj)发布于 2011-04-04 02:58:04
在将PYTHONIOENCODING脚本重定向到文件之前,将环境变量python设置为所需的编码。这样你就不需要修改原始脚本了。还要确保编写Unicode字符串,否则PYTHONIOENCODING将不起作用。如果您编写字节字符串,字节将按原样发送到终端(或重定向文件)。
发布于 2012-10-16 16:26:06
在Linux上,您可以使用tee并将stderr重定向到/dev/null。
python script.py 2>/dev/null | tee filename.txt您也不需要修改Python脚本。
https://stackoverflow.com/questions/5530708
复制相似问题