当有UTF-8字符时,如何将输出定向到文件?

时间:2014-09-10 06:30:53

标签: python linux utf-8 ascii

我有一个python脚本,从twitter API抓取一堆最近的推文并将它们转储到屏幕上。它运行良好,但是当我尝试将输出定向到文件时发生了一些奇怪的事情并且print语句导致异常:

> ./tweets.py > tweets.txt
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2018' in position 61: ordinal not in range(128)

据我所知,问题在于其中一条推文中的UTF-8字符无法很好地转换为ASCII,但是将输出转储到文件的简单方法是什么?我是否在python脚本中修复此问题,或者有没有办法在命令行强制它?

BTW,脚本是用Python2编写的。

2 个答案:

答案 0 :(得分:3)

不修改脚本,只需设置环境变量PYTHONIOENCODING=utf8,Python就会在重定向到文件时假设编码。

参考文献:

https://docs.python.org/2.7/using/cmdline.html#envvar-PYTHONIOENCODING https://docs.python.org/3.3/using/cmdline.html#envvar-PYTHONIOENCODING

答案 1 :(得分:0)

您可能需要使用.encode('utf-8')

对unicode对象进行编码

在你的python文件中将其附加到第一行

# -*- coding: utf-8 -*-

如果您的脚本文件是独立运行的,请将其附加到第二行

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

以下是文件:PEP 0263