我可以将控制台的unicode输出直接重定向到文件中吗?

时间:2011-04-03 16:02:31

标签: python unicode console

我有一个python脚本将unicode输出到控制台,我想将它重定向到一个文件。显然,python中的重定向过程涉及将输出转换为字符串,因此我无法解码unicode字符。

那么,有没有办法重定向到以UTF-8编码的文件?

4 个答案:

答案 0 :(得分:32)

当打印到控制台时,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)

答案 1 :(得分:14)

在将python脚本重定向到文件之前,将环境变量PYTHONIOENCODING设置为所需的编码。然后您将不必修改原始脚本。确保编写 Unicode 字符串,否则PYTHONIOENCODING将无效。如果您编写字节字符串,则字节将按原样发送到终端(或重定向文件)。

答案 2 :(得分:5)

在Linux下,您可以使用tee并将stderr重定向到/ dev / null。

python script.py 2>/dev/null | tee filename.txt

您也不需要修改Python脚本。

答案 3 :(得分:3)

import codecs
file_object = codecs.open( "filename", "w", "utf-8" )
file_object.write(u"खऔणन")
file_object.close()

这应该可以胜任。