Python CSV模块读取含印地语的CSV时显示乱码,如何解决?
解决印地语文本CSV读取乱码问题
可能的原因及对应解决方案:
原因1:CSV文件实际编码不是UTF-8
印地语文本的CSV可能被保存为ISO-8859-1、UTF-16或Windows专用的cp1252等编码,直接用utf-8解码会导致乱码。- 先安装
chardet库检测文件编码:pip install chardet - 修改代码加入编码检测逻辑:
import chardet import csv import copy csvFile = request.FILES.get('file') csv_copy = copy.deepcopy(csvFile) file_content = csv_copy.read() # 自动检测文件编码 detected_encoding = chardet.detect(file_content)['encoding'] print(f"检测到文件编码:{detected_encoding}") decoded_file = file_content.decode(detected_encoding).splitlines() reader = csv.reader(decoded_file) rows = list(reader) for i,row in enumerate(rows): print(row[1]) - 如果检测结果为
None,可手动尝试utf-8-sig(处理带BOM的UTF-8文件)、latin-1等常见兼容编码。
- 先安装
原因2:终端/控制台不支持UTF-8显示
即便读取到正确文本,终端未设置UTF-8编码也会显示问号:- Windows CMD中执行命令切换编码:
chcp 65001 - 确保终端字体支持印地语字符,比如使用
Segoe UI、Noto Sans Devanagari等字体。
- Windows CMD中执行命令切换编码:
简化读取替代方案
直接用csv.reader读取文件对象,跳过手动解码步骤:import csv import copy csvFile = request.FILES.get('file') csv_copy = copy.deepcopy(csvFile) # 直接读取文件对象,指定检测到的编码 reader = csv.reader(csv_copy, encoding='utf-8') # 替换为实际检测出的编码 rows = list(reader) for i,row in enumerate(rows): print(row[1])
内容的提问来源于stack exchange,提问作者padmaja cherukuri
相关产品推荐
相关产品推荐

