我在应该镜像我的开发环境的新Mac服务器上设置prod环境。这个工作在我的开发计算机上顺利运行,但在服务器上我得到了这个回溯:
Traceback (most recent call last):
File "/usr/local/share/Code/PycharmProjects/etl3/jira_scripts/jira_issues_incremental.py", line 189, in <module>
writer.writerows(rows)
File "/usr/local/bin/anaconda3/envs/etl3/lib/python3.5/csv.py", line 156, in writerows
return self.writer.writerows(map(self._dict_to_list, rowdicts))
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 1195: ordinal not in range(128)
此作业正在Run Shell Script
应用中的Automator
终端上运行。我已经检查了sys.defaultencoding()
终端中的Automater
以及机器本身。一切都说utf8
。我还检查了PostgreSQL
数据库中的编码,并且还设置为UTF8
。以下是open
正在写入的文件的Dictwriter
语句:
with open(loadfile, 'w') as outf:
writer = csv.DictWriter(
f=outf,
delimiter='|',
fieldnames=fieldnames,
extrasaction='ignore',
escapechar=r'/',
quoting=csv.QUOTE_MINIMAL
)
writer.writerows(rows)
由于所有默认编码似乎都是正确的,我甚至不知道在哪里开始追踪此错误...我应该提到这个文件然后被复制到PostgreSQL
数据库之后使用psycopg2.cursor.copy_from
命令,因此文件应该以与之兼容的模式写入。
答案 0 :(得分:2)
您没有为文件指定编码,因此默认编解码器用于您的系统。目前是ASCII。请参阅open()
documentation:
在文本模式下,如果未指定 encoding ,则使用的编码取决于平台:调用
locale.getpreferredencoding(False)
以获取当前的语言环境编码。
请指定其他编解码器。 UTF-8可以工作:
with open(loadfile, 'w', encoding='utf8') as outf:
sys.getdefaultencoding()
不适用于此处;这仅仅是非限定str.encode()
来电的默认值。