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 版本)来解决这个问题
我错过了什么吗?
如果错误在 print
,print
将 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)
使用:
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 版本)来解决这个问题
我错过了什么吗?
如果错误在 print
,print
将 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)