:
postgres 9.5
psycopg2 2.6.2
python 3.4.2
system(debian jessie)locale:en_US.UTF-8
python的sys.stdout.encoding是UTF-8
数据库是UTF8,我有é,ç,è等条目......
pgcur.execute("SELECT * FROM table1")
rows = pgcur.fetchall()
for r in rows:
print(r)
发出错误:
UnicodeEncodeError:'ascii'编解码器无法在位置521中加载字符'\ xe9':序数不在范围内(128)
我不明白,psycopg2连接编码是UTF8,数据库是UTF8,python3默认是字符串unicode ...为什么有ascii编解码器参与?
print(r.encoding('utf8'))
解决了这个问题,但我不记得使用postgresql 9.4(以及相同的psycopg2 / python版本)
我想念一下吗?
答案 0 :(得分:1)
从postgres 9.4到9.5升级无关...... 默认情况下是uwsgi-emperor配置:
autoload = true
出于不明原因,错过了语言环境加载 使用该选项,当调用locale.getlocale()时,python3.4解释器返回(None,None),因此它默认为ANSI_X3.4-1968
#autload = true
plugins = python34
解决了这个问题,locale.getlocale()返回OS定义的语言环境(在这种特定情况下为UTF-8)
答案 1 :(得分:0)
如果错误在print
上,print
将Unicode字符串编码为终端的编码。如果终端配置错误(您使用的是Linux吗?),可能会选择ascii
而不是Linux终端的典型utf8
配置。检查LANG
环境变量。