首页 > 解决方案 > 'utf-16-le' 编解码器在 PYTHON 中读取 EXCEL 时无法解码字节

问题描述

我正在尝试使用不同语言(阿拉伯语、希腊语、意大利语、希伯来语等)读取各种数量的 xls 文件,当我尝试调用 open_workbook 函数时出现下面显示的错误,知道如何将格式设置为任何语言?

代码:

book = xlrd.open_workbook(workbook_url)

错误:

return codecs.utf_16_le_decode(input, errors, True) UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 372-373: unexpected end of data

标签: pythonexcelxlrd

解决方案


语言不太可能是问题。更有可能是 xlrd 无法检测 .xlsx 文件的编码。

正如有关处理 unicode的文档中的 xlrd 注释:

此包将所有文本字符串呈现为 Python unicode 对象。从 Excel 97 开始,Excel 电子表格中的文本已存储为 UTF-16LE(一种 16 位 Unicode 转换格式)。较旧的文件(Excel 95 和更早版本)不保留 Unicode 字符串;CODEPAGE 记录提供了一个代码页编号(例如,1252),xlrd 使用它来导出用于转换为 Unicode 的编码(例如:“cp1252”)。

我看这个的第一步是确定实际的编码。该文件的年龄以及它是如何创建的(实际的 Excel?或通过 3rd 方工具)。

您可以通过在文本/十六进制编辑器中打开文件来查找 CODEPAGE 记录,然后尝试强制该编码。

根据它不是 utf-16le 的错误(xlrd 的默认假设),这听起来对我来说,所以你将不得不以某种方式确定它,否则开始尝试随机编码,例如:

book = xlrd.open_workbook(..., encoding_override="cp1252")
book = xlrd.open_workbook(..., encoding_override="utf-8")
book = xlrd.open_workbook(..., encoding_override="latin-1")

推荐阅读