簡體   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