我有一个python脚本将unicode输出到控制台,我想将它重定向到一个文件。显然,python中的重定向过程涉及将输出转换为字符串,因此我无法解码unicode字符。
那么,有没有办法重定向到以UTF-8编码的文件?
答案 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()
这应该可以胜任。