Ошибка UnicodeDecodeError при обращении к DB FireBird2.5 через Python
Всем привет!
Ребят, помогите с решением вопроса. На работе возникла необходимость через Python обратиться к DB FireBird2.5, данная база используется в системе контроля управления доступом PERCo.
Для начала сделали простенький запрос:
import fdb
con = fdb.connect(dsn='192.168.128.15:D/DB/SCD17K.fdb', user='SYSDBA', password='pass', sql_dialect=3, charset='utf-8')
cur=con.cursor()
cur.execute('SELECT count(*) from staff')
answer = cur.fetchall()
print(answer)
При этом возникает ошибка:
Traceback (most recent call last):
File "/tmp/test.py", line 4, in <module>
con = fdb.connect(dsn='192.168.128.15:D/DB/SCD17K.fdb', user='SYSDBA', password='pass', sql_dialect=3, charset='utf-8')
File "/home/admin1/.local/lib/python3.10/site-packages/fdb/fbcore.py", line 869, in connect
raise exception_from_status(DatabaseError, _isc_status,
File "/home/admin1/.local/lib/python3.10/site-packages/fdb/fbcore.py", line 607, in exception_from_status
msglist.append('- ' + (msg.value).decode(sys_encoding))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 0: invalid continuation byte
Понимаю, что проблема с кодировкой, пробовал что-то типа:
query = 'SELECT count(*) from staff'.encode('utf-8')
cur.execute(query)
но, собственно, результата никакого нет.
Причем через Perl это делалось:
...password='pass', id_dialect=3, id_charset='utf-8'...
и все работало.
Подскажите, пожалуйста, как можно решить данную проблему.
Summary info about DB:
Database file ODS Version 11.2
Page size 4096
Pages 1226071
Size on disk 4.68GB
Page buffers 2048
Read only false
Settings
Dialect 3
Default character set UTF8
Sweep interval 20000
Forced writes
Информация о ПО:
v.python=3.10.9, fdb-2.0.2 ...
ну и какой-то AstraLinux там не помню уже.
Источник: Stack Overflow на русском