SQLAlchemy 和 Postgres UnicodeDecodeError
SQLAlchemy and Postgres UnicodeDecodeError
我面临的问题与此处发布的问题相同SQLAlchemy and UnicodeDecodeError。当我从 table 获取结果时,出现错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
提出的两个解决方案是在python中使用sy.setdefaultencoding('utf8')
并将额外的字符集参数传递给连接字符串,如下所示:
conn_str='postgresql+psycopg2://'+str(dbhost)+':' + str(port) + '/postgres?charset=utf8'
两种解决方案似乎都无法解决问题。我还能调试什么? table本质上是各国的GIS数据。所以 table 具有特殊的字符。
似乎编码是从服务器到客户端不同的。您可以通过发出这些命令来验证这一点:
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
你的环境变量OS:export PGCLIENTENCODING=UTF8
- 在 postgres 配置文件中编辑
client_encoding
- 使用
ALTER SYSTEM
(之后必须使用SELECT pg_reload_conf();
刷新配置):ALTER SYSTEM SET client_encoding = 'UTF-8';
更新: 不幸的是,无法从 SQL_ASCII 启用自动转换。
If the client character set is defined as SQL_ASCII, encoding
conversion is disabled, regardless of the server's character set. Just
as for the server, use of SQL_ASCII is unwise unless you are working
with all-ASCII data.
我面临的问题与此处发布的问题相同SQLAlchemy and UnicodeDecodeError。当我从 table 获取结果时,出现错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
提出的两个解决方案是在python中使用sy.setdefaultencoding('utf8') 并将额外的字符集参数传递给连接字符串,如下所示:
conn_str='postgresql+psycopg2://'+str(dbhost)+':' + str(port) + '/postgres?charset=utf8'
两种解决方案似乎都无法解决问题。我还能调试什么? table本质上是各国的GIS数据。所以 table 具有特殊的字符。
似乎编码是从服务器到客户端不同的。您可以通过发出这些命令来验证这一点:
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
你的环境变量OS:export PGCLIENTENCODING=UTF8
- 在 postgres 配置文件中编辑
client_encoding
- 使用
ALTER SYSTEM
(之后必须使用SELECT pg_reload_conf();
刷新配置):ALTER SYSTEM SET client_encoding = 'UTF-8';
更新: 不幸的是,无法从 SQL_ASCII 启用自动转换。
If the client character set is defined as SQL_ASCII, encoding conversion is disabled, regardless of the server's character set. Just as for the server, use of SQL_ASCII is unwise unless you are working with all-ASCII data.