使用:
postgres 9.5
psycopg2 2.6.2
python 3.4.2
系统(debian jessie)地区: 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 9:序数不在范围(128)
我不明白,psycopg2连接编码是UTF8,数据库是UTF8,python3默认是字符串unicode。为什么涉及到ascii编解码器?
print(r.encoding('utf8'))解决了这个问题,但我不记得必须用PostgreSQL9.4(以及相同的心理学版2/python版本)这样做。
我错过了什么吗?
发布于 2016-03-12 00:22:47
与从postgres 9.4升级到9.5无关.
默认情况下,这是uwsgi皇帝的配置:
autoload = true因为一个不知道的原因,错过了现场加载。
使用该选项,python3.4解释器在调用locale.getlocale()时返回(无,无),因此默认为ANSI_X3.4-1968
#autload = true
plugins = python34解决了这个问题,locale.getlocale()返回OS定义的地区(在这个特定情况下为UTF-8)
发布于 2016-03-11 21:20:38
如果错误在print上,则print将Unicode字符串编码到终端的编码中。如果终端配置错误(您在Linux上吗?),它可能选择ascii而不是Linux终端的典型utf8配置。检查LANG环境变量。
https://stackoverflow.com/questions/35949241
复制相似问题