scrapy + postgres: UnicodeEncodeError ascii codec cant encode character \u2019
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me
Scrapy爬虫在Mac上能正常工作,在ubuntu docker上跑的时候出问题,抛下面的错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position
用的是Python3(Anaconda), scrapy, postgresql.
开始在python端搞了半天没有结果,python的encoding都是正常的。
import sys
sys.getdefaultencoding() # utf-8
后来检查postgresql编码,发现问题出在数据库编码上
psql -l
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------+----------+-----------+---------+-------+--------------------------
getnews_dev | postgres | SQL_ASCII | C | C | =Tc/postgres +
| | |
修改方法:
在psql里面修改数据库编码
postgres@xxxxdd:/psql
postgres=#update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'getnews_dev'
问题解决!
2021-01更新
如果遇到sys.getdefaultencoding()
为ascii
, 可以通过在connection string里面加encoding解决.
connection string如下:
create_engine(URL(**db), encoding="utf8") # 注意后面的那部分, encoding="utf8"