Python读取含特殊字符的CSV文件乱码问题解决
解决Python读取含特殊字符CSV的乱码问题
1. 读取时指定正确的编码格式
CSV乱码大多源于读取时编码不匹配,针对含多国语言特殊字符的文件,优先尝试以下编码:
- utf-8 / utf-8-sig:绝大多数现代CSV采用的编码,
utf-8-sig可处理带BOM头的UTF-8文件 - latin-1 / cp1252:部分Windows环境生成的CSV可能使用这类编码
用标准csv模块的示例:
import csv # 尝试utf-8编码读取 with open('your_file.csv', 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) for row in reader: print(row) # 验证特殊字符显示情况 # 若utf-8失效,换用utf-8-sig处理带BOM的文件 with open('your_file.csv', 'r', encoding='utf-8-sig') as csv_file: reader = csv.reader(csv_file) # 后续数据处理操作
用pandas的示例:
import pandas as pd df = pd.read_csv('your_file.csv', encoding='utf-8') # 编码不符时尝试替换为latin-1 # df = pd.read_csv('your_file.csv', encoding='latin-1')
2. 自动检测文件实际编码
不确定文件编码时,用chardet库检测:
- 先安装库:
pip install chardet - 检测并读取:
import chardet import csv # 以二进制模式读取文件,检测编码 with open('your_file.csv', 'rb') as f: detect_result = chardet.detect(f.read()) # 使用检测到的编码读取文件 with open('your_file.csv', 'r', encoding=detect_result['encoding']) as csv_file: reader = csv.reader(csv_file) for row in reader: print(row)
3. 修复已读错的乱码字符串
若已用错误编码读取内容,可尝试反向编码解码修复(仅适用于特定场景):
# 示例:用latin-1错误读取utf-8内容后的修复 wrong_str = '�degaard' fixed_str = wrong_str.encode('latin-1').decode('utf-8') print(fixed_str) # 输出 Ødegaard
额外注意
写入CSV时需指定相同编码,避免二次乱码:
with open('output.csv', 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) writer.writerows(your_data)
内容的提问来源于stack exchange,提问作者Ibashorun Ogunmola
相关产品推荐
相关产品推荐

