繁体   English   中英

SQLAlchemy和Postgres UnicodeDecodeError

[英]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
  • 在postgres配置文件中编辑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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM