我已经构建了一个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
这里发生了什么,以及如何将信息转储到文件中?
答案 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)