python - '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
解决方案
语言不太可能是问题。更有可能是 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")
推荐阅读
- c++ - 类 WholeNumbers 的类型引用初始化无效
- javascript - 如何在复制到剪贴板时在 textarea 上添加新行?
- azure - 有什么方法可以在 zeppelin Notebook 中使用 Spark SQL 连接器
- bash - Bash:如何将 MONDDHR:MI 中的字符串转换为 Bash 中的日期?
- jdbc - CREATE LINKED TABLE 不适用于 PreparedStatement
- django-models - 参数@objname 不明确或声明的@objtype 错误
- c# - C# - 字符串未被识别为有效的 DateTime
- java - isPrime 为相同的值返回不同的结果?
- flutter - 过滤流到列表
- php - 在 Laravel 中使用带有多个查询输出的分页