我面临的问题与此处SQLAlchemy and 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数据。因此表格具有特殊性。
答案 0 :(得分:0)
似乎编码因服务器而异。您可以验证这个命令:
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
环境变量:export PGCLIENTENCODING=UTF8
client_encoding
ALTER SYSTEM
(之后必须使用SELECT pg_reload_conf();
刷新配置):ALTER SYSTEM SET client_encoding = 'UTF-8';
更新:不幸的是,无法从SQL_ASCII启用自动转换。
如果客户端字符集被定义为SQL_ASCII,则编码 无论服务器的字符集如何,都禁用转换。只是 至于服务器,除非你正在工作,否则使用SQL_ASCII是不明智的 使用全ASCII数据。