python - fdb异常: 'utf-8' codec can't decode byte

标签 python character-encoding

我正在编写一个小型 Python 应用程序,用于从 Firebird 数据库读取数据。
我正在使用 fdb 1.8 和 Firebird Embedded 2.5。

我无法解码以下字符串:

//centrale/Danea Easyfatt/ANYMA 2017 dal 06-02-17.eft

我不断收到此异常:

Traceback (most recent call last):
      File "C:\Matteo\PyCharm\CMakeR\God.py", line 165, in openDBFromMenu
        self.openDB(False)
      File "C:\Matteo\PyCharm\CMakeR\God.py", line 147, in openDB
        while (self.dbManager.connectTo(path)==False):
      File "C:\Matteo\PyCharm\CMakeR\DBManager.py", line 36, in connectTo
        charset="WIN1252"
      File "C:\Matteo\PyCharm\CMakeR\venv\lib\site-packages\fdb\fbcore.py", line 736, in connect
        "Error while connecting to database:")
      File "C:\Matteo\PyCharm\CMakeR\venv\lib\site-packages\fdb\fbcore.py", line 562, in exception_from_status
        msglist.append('- ' + (msg.value).decode('utf_8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 38: invalid continuation byte


我该怎么办?
我已经尝试过以 WIN1252 和其他格式进行解码和编码。
我正在摸不着头脑。

最佳答案

您需要设置与数据库连接的字符集。

例如,使用fdb包需要设置字符集参数:

import fdb
con = fdb.connect(
dsn='bison:/temp/test.db',
user='sysdba', password='pass',
charset='WIN1251' # specify a correct character set for the connection

)

使用sqlalchemy,您可以在database_uri中设置它:

from sqlalchemy import create_engine
firebird = create_engine("firebird+fdb://%(user)s:%(pwd)s@%(host)s:%(port)/%(path)s?charset=%(charset)s"

关于python - fdb异常: 'utf-8' codec can't decode byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283396/

相关文章:

character-encoding - &和&字符编码之间的区别

python - 如何修正 sklearn.naive_bayes 中的 sample_weight?

带有 RotatingFileHandler 的 Python 3 记录器超过 maxBytes 限制

python - Python中的字符串连接与字符串替换

python - Django 中的多个嵌套外键关系

mysql - 在 MySQL Workbench 中查看日语字符

python - 无法写入文件,但可以写入文本

python - GAE Python - 如何设置 cron 作业来启动后端任务

ruby - Ruby 从 1.8.7 升级到 1.9.3 后出现 Yaml 编码问题

python - 从 VBA 到 Flask 的 HTTP 请求的编码问题