[python]解决将 python 程序输出结果重定向到文件时,出现 UnicodeDecodeError 错误

比如:有一个 python 程序 hello.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print u'你好'

将输出结果重定向到文件,就会出现 UnicodeEncodeError:

$ python hello.py > hello.txt
Traceback (most recent call last):
  File "hello.py", line 4, in <module>
    print u'你好'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

之所以会出现编码错误,是因为: 输出到控制台时,print 使用的是控制台的默认编码, 而重定向到文件时,print 就不知道使用什么编码了,于是就使用了默认编码 ascii 导致出现编码错误。

可以通过设置环境变量 PYTHONIOENCODING 告诉 python 使用哪种编码:

$ export PYTHONIOENCODING=utf8
$ python hello.py  > hello.txt
$ cat hello.txt
你好

Comments