[英]SQLAlchemy and Postgres UnicodeDecodeError
我面临的问题与此处发布的SQLAlchemy和UnicodeDecodeError相同 。 当我从表中获取结果时,出现错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
提出的两个解决方案是在python中使用sy.setdefaultencoding('utf8')并将附加的charset参数传递给连接字符串,如下所示:
conn_str='postgresql+psycopg2://'+str(dbhost)+':' + str(port) + '/postgres?charset=utf8'
两种解决方案似乎都不能解决问题。 我还能调试什么? 该表实质上是各个国家的GIS数据。 因此表具有特殊性。
服务器和客户端的编码似乎不同。 您可以通过以下命令验证它的发出:
SHOW client_encoding; --Equivalent to: SELECT current_setting('client_encoding');
SHOW server_encoding; --Equivalent to: SELECT current_setting('server_encoding');
PostgreSQL自动转换为客户端编码。 在您的环境中,两者可能都不同。 您可以通过多种方式配置client_encoding
:
SET
命令: SET client_encoding = 'UTF-8';
set_config
函数: SELECT set_config('client_encoding', 'UTF-8', true);
PGCLIENTENCODING
环境var: export PGCLIENTENCODING=UTF8
client_encoding
ALTER SYSTEM
(此后必须使用SELECT pg_reload_conf();
刷新配置): ALTER SYSTEM SET client_encoding = 'UTF-8';
更新:不幸的是,不可能从SQL_ASCII启用自动转换。
如果将客户端字符集定义为SQL_ASCII,则无论服务器的字符集如何,都将禁用编码转换。 与服务器一样,除非使用全ASCII数据,否则使用SQL_ASCII是不明智的。
引用Postgres文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.