python ibm-db 失败 UnicodeDecodeError: 'utf-8' codec can't decode byte: invalid continuation byte

问题描述

python 脚本在 IBM i 上运行并使用 ibm-db 访问 IBM i 上的本地 DB2 数据库

python 3.6.9 & ibm-db 2.0.5.9

DB2 认编码 (CCSID) 是 37 & python 是 'utf-8'

突然间,python 脚本开始在 1 个盒子上失败。相同的 python 脚本正在其他盒子上工作,所以我怀疑数据或环境设置问题。这不是数据问题,因为当 python 使用不同的 db 包 pyodbc 访问 Windows 上的相同数据时,它会起作用。这不是 env 设置问题,因为 python 版本和第 3 方软件包版本与其他工作盒匹配。

代码片段:

    row = ibm_db.fetch_row(stmt)
    while(row):
        transactions = []
        prvStrmName = ibm_db.result(stmt,'STRMNAME') # failing here
        strmId = ibm_db.result(stmt,'STREAMID')
        prvStrmId = strmId

我尝试将其编码为“utf-8”,但没有帮助。

prvStrmName = ibm_db.result(stmt,'STRMNAME').encode('utf-8')

不知道哪里出了问题。我会很感激任何帮助/指示吗?

2020-12-22 11:17:44,959 - root - ERROR - 'utf-8' codec can't decode byte 0xdd in position 38: invalid continuation byte
Traceback (most recent call last):
  File "voianalytics.py",line 170,in <module>
    summarize_income_stream(stmt)
  File "voianalytics.py",line 69,in summarize_income_stream
    prvStrmName = ibm_db.result(stmt,'STRMNAME')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdd in position 38: invalid continuation byte

ibm_db.client_info(conn) 在 IBM i 上的结果是:

DRIVER_NAME: string(13) "QSQCLI.SRVpgm"
DRIVER_VER: string(5) "07030"
DATA_SOURCE_NAME: string(8) "XXXXXXXX"
DRIVER_ODBC_VER: string(4) "3.00"
ODBC_VER: string(0) ""
ODBC_sql_CONFORMANCE: string(4) "CORE"
APPL_CODEPAGE: int(1208)
CONN_CODEPAGE: int(1208)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)