You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django读取含阿拉伯语的上传.xls文件时出现UnicodeDecodeError求助

解决上传阿拉伯语.xls文件时的UnicodeDecodeError问题

兄弟,你这问题的根源找错地方啦——.xls是二进制格式的Excel文件,根本不是文本或者HTML文件,你用TextIOWrapper把它当文本读,还想用BeautifulSoup解析,这肯定会触发解码错误啊!

正确的解决思路:用专门的Excel解析库

处理.xls文件得用针对Excel格式的专业库,比如xlrd(专门适配旧版.xls)或者pandas(更易用,支持多格式多语言),下面给你具体的实现方案:

方案1:用xlrd解析.xls文件

注意:xlrd 2.0及以上版本不再支持.xls格式,所以需要安装指定版本:

pip install xlrd==1.2.0

修改后的代码示例:

import xlrd

# 直接读取上传的二进制文件,不需要TextIOWrapper
certain_file = request.FILES['certain_file']
# 打开Excel文件,指定适合阿拉伯语的编码(优先试utf-8,不行换cp1256)
workbook = xlrd.open_workbook(file_contents=certain_file.read(), encoding_override='utf-8')

# 获取第一个工作表
sheet = workbook.sheet_by_index(0)

# 遍历行读取内容(示例)
for row_idx in range(sheet.nrows):
    row_data = sheet.row_values(row_idx)
    # 这里可以处理每一行的阿拉伯语内容
    print(row_data)

如果utf-8解码失败,把encoding_override改成阿拉伯语常用的cp1256再试。

方案2:用pandas简化解析(更推荐)

pandas处理Excel文件更便捷,对多语言的兼容性也更好:

pip install pandas xlrd==1.2.0  # 同样需要指定xlrd版本

代码示例:

import pandas as pd

certain_file = request.FILES['certain_file']
# 读取Excel文件,指定编码
df = pd.read_excel(certain_file, encoding='utf-8')

# 可以直接操作DataFrame,比如查看前几行数据
print(df.head())
# 遍历每一行处理数据
for index, row in df.iterrows():
    # 处理row中的阿拉伯语内容
    pass

为什么之前的方法行不通?

你原来的代码把二进制的Excel文件当成纯文本读取,TextIOWrapper会尝试用系统默认的charmap编码解码,但Excel文件里的二进制数据根本不是文本格式,自然会出现解码失败的错误;而且BeautifulSoup是用来解析HTML/XML的工具,完全不适合处理Excel文件。

内容的提问来源于stack exchange,提问作者Yama85 Yamakassi85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:00