UnicodeDecodeError: 'utf-16-le'

新手上路,请多包涵

我正在尝试从访问数据库中提取表列表。该脚本遍历并显示大约三分之一的表并出现以下错误:

回溯(最近调用最后):文件“C:/GageInfo/sourcecode for GageTrakNotify/__test script.py”,第 31 行,在 cursor2.columns(rows.table_name) 中的 fld: UnicodeDecodeError: ‘utf-16-le’编解码器无法解码位置 132-133 中的字节:非法编码

任何提示将不胜感激。

 import pyodbc

cursor1 = conn.cursor()
cursor2 = conn.cursor()

tblCount = 0
for rows in cursor1.tables():
   if rows.table_type == "TABLE":
       tblCount += 1
       print(rows.table_name)
       for fld in cursor2.columns(rows.table_name):
           print(fld.table_name, fld.column_name)

conn.close()

原文由 Eddie Snipes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 571
1 个回答

这几乎可以肯定是由 cursor.columns() 的一个已知问题引起的,如果表元数据包含列的“描述”,则在使用 Access ODBC 驱动程序时。以下 GitHub 问题包括对该问题和可能的解决方法的讨论:

https://github.com/mkleehammer/pyodbc/issues/328

TL;DR:Access ODBC 驱动程序在这些情况下返回尾随垃圾字节,并且字节的某些组合将不是有效的 UTF-16LE 编码字符。 pyodbc 输出转换器函数可用于拦截字节字符串并在不抛出异常的情况下对其进行解码。此处描述了具体的解决方法:

https://github.com/mkleehammer/pyodbc/issues/328#issuecomment-419655266

原文由 Gord Thompson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题