连接和Python中的编码不匹配

时间:2019-04-03 15:11:47

标签: character-encoding python-3.6 firebird

我在启动Firebird连接时遇到了一些麻烦,这似乎与编码有关。我正在这样连接数据库(local_copy/path/to/database.fdb):

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

仅适用于某些字符集。我需要拥有ISO8859_1字符集,该字符集以前曾可用,但现在不再可用(可能是由于更新)。

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)

当我使用ISO88591时,连接有效,但是Python对此不满意:

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

因此,我认为向Python添加别名ISO88591可能会起作用。我尝试编辑/usr/lib64/python3.6/encodings/aliases.py,但这似乎没有任何效果。

1 个答案:

答案 0 :(得分:2)

作为在Firebird支持上发布的内容的简短摘要,看起来CentOS上Firebird 2.5.8中的fbintl模块已损坏。

如Philippe Makowski所述:

  

对不起,它坏了,我不知道如何解决:   https://bugzilla.redhat.com/show_bug.cgi?id=1636177

     

但是Firebird 3还可以   https://copr.fedorainfracloud.org/coprs/makowski/firebird/

https://bugzilla.redhat.com/show_bug.cgi?id=1636177中建议的一种可能的解决方法是降级到2.5.7,或者继续使用2.5.8,但将其fbintl模块替换为2.5.7中的模块。