Python UnicodeDecodeError:&x27;utf-16-le';

Python UnicodeDecodeError:&x27;utf-16-le';,python,ms-access,odbc,pyodbc,utf-16le,Python,Ms Access,Odbc,Pyodbc,Utf 16le,我正试图从access数据库中提取表列表。脚本将遍历并显示大约三分之一的表,并出现以下错误: 回溯(最近一次调用):文件“C:/GageInfo/sourcecode for” GageTrakNotify/_测试脚本.py”,第31行,在 对于游标中的fld 2.列(行.表_名称):UnicodeDecodeError:“utf-16-le”编解码器无法解码132-133位置的字节:非法 编码 任何提示都将不胜感激 import pyodbc cursor1 = conn.cursor()

我正试图从access数据库中提取表列表。脚本将遍历并显示大约三分之一的表,并出现以下错误:

回溯(最近一次调用):文件“C:/GageInfo/sourcecode for” GageTrakNotify/_测试脚本.py”,第31行,在 对于游标中的fld 2.列(行.表_名称):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()

听起来好像有一个Unicode(非ASCII)嵌入到某个表名中。弄清楚它停在哪个表上将确认情况是否如此,但最终您希望Python脚本只处理Unicode,这可以通过string
decode
方法完成:

for fld in cursor2.columns(rows.table_name.decode('utf-16-le')):

这应该在任何可能出现Unicode字符的地方进行(例如,列名)。

感谢您的提示和反馈。我通过捕获列表中的信息,然后打印结果,并使用try语句处理错误并应用正确的unicode来解决这个问题


你的建议为我指明了正确的方向

使用当前代码的输出标识最后一次成功打印,然后在Access中打开数据库并在“设计”视图中检查表,以确定导致错误的列名(或表名)。然后,您的问题将告诉我们它是什么。表/列名中的Unicode字符本身不是问题。我刚刚在Python3.6下测试了pyodbc 4.0.21,问题中的代码正确地打印了列名
[pile of Agreed,@GordThompson.
print
语句(现在在Python3中起作用)可以处理它,我想这就是
print(rows.table\u name)的原因
在他的代码中运行良好。我所经历的是,有时与导入模块关联的对象(及其伴随的方法)无法处理Unicode编码,我想这可能就是
cursor2.columns(rows.table\u name)的原因
出错。我最近在一个用于写入Excel文件的模块中遇到了这种情况:除非我首先将
解码
应用于我正在编写的内容,否则它不允许我写入。我尝试了此操作,但得到了一个错误,即对象没有“decode”属性。您能识别出发生错误的表吗?@EddieSnipes-您可能需要编辑您的问题,并提供更多详细信息,例如Python2或Python3、数据库文件(.mdb或.accdb)的类型、您正在使用的Access ODBC驱动程序、您正在使用的pyodbc版本。