Encoding mismatch in connection and Python

China☆狼群 提交于 2021-02-11 14:38:36

问题


I am having some troubles getting my Firebird connection to work, and it all seems related to encodings. I am connecting to the database like this (local_copy is /path/to/database.fdb):

conn = fdb.connect(dsn=local_copy, user='****', password='****', charset="ISO8859_1")

which only works for certain charsets. I need to have the ISO8859_1 charset, which worked before, but not anymore (perhaps because of an update).

Traceback (most recent call last):
  File "sync.py", line 10, in <module>
    conn = fdb.connect(dsn=local_copy, user='**', password='**', charset="ISO8859_1")
  File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 848, in connect
    "Error while connecting to database:")
fdb.fbcore.DatabaseError: ('Error while connecting to database:\n- SQLCODE: -924\n- bad parameters on attach or create database\n- CHARACTER SET ISO8859_1 is not defined', -924, 335544325)

When I use ISO88591, the connect works, but Python is not happy with that:

Traceback (most recent call last):
  File "sync.py", line 10, in <module>
    conn = fdb.connect(dsn=local_copy, user='***', password='***', charset="ANSI")
  File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 826, in connect
    no_reserve, db_key_scope, no_gc, no_db_triggers, no_linger)
  File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 759, in build_dpb
    dpb.add_string_parameter(isc_dpb_user_name, user)
  File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 624, in add_string_parameter
    value = value.encode(charset_map.get(self.charset, self.charset))
LookupError: unknown encoding: ISO88591

So, I thought perhaps adding an alias ISO88591 to Python would work. I tried to edit the /usr/lib64/python3.6/encodings/aliases.py, but that didn't seem to have any effect.


回答1:


As a short summary of what was posted on Firebird-support, it looks the fbintl module in Firebird 2.5.8 on CentOS is broken.

As indicated by Philippe Makowski:

Sorry, it is broken, and I don't know how to fix it : https://bugzilla.redhat.com/show_bug.cgi?id=1636177

but Firebird 3 is ok https://copr.fedorainfracloud.org/coprs/makowski/firebird/

A possible workaround suggested in https://bugzilla.redhat.com/show_bug.cgi?id=1636177 is to either downgrade to 2.5.7, or to continue using 2.5.8, but replace its fbintl module with the one from 2.5.7.



来源:https://stackoverflow.com/questions/55498536/encoding-mismatch-in-connection-and-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!