[英]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.