首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python3默认为uwsgi皇帝的ascii

python3默认为uwsgi皇帝的ascii
EN

Stack Overflow用户
提问于 2016-03-11 20:22:38
回答 2查看 501关注 0票数 1

使用:

postgres 9.5

psycopg2 2.6.2

python 3.4.2

系统(debian jessie)地区: en_US.UTF-8

python的sys.stdout.encoding是UTF-8

数据库是UTF8,我有一些条目。

代码语言:javascript
复制
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编解码器?

代码语言:javascript
复制
print(r.encoding('utf8'))

解决了这个问题,但我不记得必须用PostgreSQL9.4(以及相同的心理学版2/python版本)这样做。

我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-12 00:22:47

与从postgres 9.4升级到9.5无关.

默认情况下,这是uwsgi皇帝的配置:

代码语言:javascript
复制
autoload = true

因为一个不知道的原因,错过了现场加载。

使用该选项,python3.4解释器在调用locale.getlocale()时返回(无,无),因此默认为ANSI_X3.4-1968

代码语言:javascript
复制
#autload = true
plugins = python34

解决了这个问题,locale.getlocale()返回OS定义的地区(在这个特定情况下为UTF-8)

票数 1
EN

Stack Overflow用户

发布于 2016-03-11 21:20:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35949241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档