只有在将输出重定向到文件时,Django管理命令才会引发UnicodeEncodeError

时间:2015-04-20 17:53:16

标签: python linux django shell stdout

我已经构建了一个Django management command,可以在stdout上打印出一些内容(使用print)。一切正常,但是......

当我尝试使用

将输出重定向到文件时
./manage.py my_command > a_file.txt

我明白了:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 14: ordinal not in range(128)

没有追溯,只是那个。

我尝试./manage.py my_command | less只是为了它的乐趣,它显示了一些输出,可能是在遇到第一个非ASCII字符之前的行。输出有一些UTF-8字符,没办法。

Mac笔记本电脑和Red Hat Linux服务器上发生同样的错误。使用Python 2.7.9

这里发生了什么,以及如何将信息转储到文件中?

1 个答案:

答案 0 :(得分:1)

您可以使用UTF-8编码输出更改脚本的标准输出:

0N0MNM
0NM0NM
0NMN0M
0NMNM0
N0M0NM
N0MN0M
N0MNM0
NM0N0M
NM0NM0
NMN0M0
00NMNM
N00MNM
NM00NM
NMN00M
NMNM00

或者您可以在打印字符串之前对其进行编码:

import sys
import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)