python3 使用 uwsgi-emperor 默认为 ascii

python3 default to ascii with uwsgi-emperor

使用:
Postgres 9.5
psycopg2 2.6.2
python3.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':序号不在范围内 (128)

我不明白,psycopg2 连接编码是 UTF8,数据库是 UTF8,python3 默认是字符串 unicode...为什么涉及 ascii 编解码器?

print(r.encoding('utf8'))

解决了这个问题,但我不记得必须使用 postgresql 9.4(以及相同的 psycopg2/python 版本)来解决这个问题

我错过了什么吗?

如果错误在 printprint 将 Unicode 字符串编码为终端的编码。如果终端配置错误(你在 Linux 吗??),它可能选择 ascii 而不是 Linux 终端的典型 utf8 配置。检查 LANG 环境变量。

与从 postgres 9.4 升级到 9.5 无关...
默认是uwsgi-emperor配置:

autoload = true

由于未知原因,错过了区域设置加载。
使用该选项,python3.4 解释器 returns (None, None) 在调用 locale.getlocale() 时,因此它默认为 ANSI_X3 .4-1968

#autload = true
plugins = python34

解决了问题,locale.getlocale() returns OS 定义了语言环境(在这种情况下为 UTF-8)