Python CSV写入乱码问题解决方案 - 彻底解决中文编码问题 | Python编程指南
- Python
- 2025-07-15
- 1484
Python CSV写入乱码问题解决方案
彻底解决csv.writerow中文乱码问题,支持UTF-8等多编码格式
常见问题现象
当使用Python的csv模块写入中文或其他非ASCII字符时,经常会出现乱码问题:
- CSV文件打开后显示为���这样的乱码字符
- 中文字符变成了问号或方框
- 出现奇怪的符号组合如"æ–‡å—化"
- Excel打开时显示乱码但文本编辑器正常
乱码根本原因分析
Python的csv模块默认使用系统编码(如Windows的gbk),而大多数现代编辑器使用UTF-8编码。
当编码方式不一致时,就会导致字符显示错误。另外,Excel对UTF-8 CSV文件的识别也存在问题。
错误写法
导致乱码的代码
import csv
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(["姓名", "年龄", "城市"])
writer.writerow(["张三", 25, "北京"])
writer.writerow(["李四", 30, "上海"])
结果:CSV文件中的中文显示为乱码
正确写法
解决乱码的代码
import csv
# 使用utf-8-sig编码解决乱码问题
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
writer.writerow(["姓名", "年龄", "城市"])
writer.writerow(["张三", 25, "北京"])
writer.writerow(["李四", 30, "上海"])
结果:CSV文件中文正常显示,兼容Excel
解决方案汇总
解决方案1:使用utf-8-sig编码
这是解决Excel乱码问题的最佳方案,utf-8-sig会在文件开头添加BOM(Byte Order Mark),帮助Excel识别编码。
Python代码示例
import csv
# 使用utf-8-sig编码解决乱码问题
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as file:
writer = csv.writer(file)
# 写入数据...
解决方案2:使用utf-8编码并手动添加BOM
对于不支持utf-8-sig的旧Python版本,可以手动添加BOM:
Python代码示例
import csv
import codecs
with open('data.csv', 'w', newline='') as file:
# 写入UTF-8 BOM
file.write(codecs.BOM_UTF8.decode('utf-8'))
writer = csv.writer(file)
# 写入数据...
解决方案3:使用pandas库
pandas库处理CSV文件更加简单,自动处理编码问题:
Python代码示例
import pandas as pd
data = {
"姓名": ["张三", "李四", "王五"],
"年龄": [25, 30, 28],
"城市": ["北京", "上海", "广州"]
}
df = pd.DataFrame(data)
# 使用utf-8-sig编码保存
df.to_csv('data.csv', index=False, encoding='utf-8-sig')
完整解决步骤
1
确定文件编码需求
根据使用场景选择编码:
- 仅需要文本编辑器查看 → utf-8
- 需要Excel打开 → utf-8-sig
- 国内Windows系统 → gbk/gb2312
2
正确打开文件
在open函数中指定编码和换行符处理:
# 推荐写法
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as file:
# 文件操作
3
写入CSV内容
使用csv.writer正常写入数据
writer = csv.writer(file)
writer.writerow(["表头1", "表头2", "表头3"])
writer.writerows(data_rows)
4
验证结果
使用文本编辑器和Excel分别打开CSV文件,确保中文正常显示
高级技巧:处理特殊字符
当数据包含逗号、引号等特殊字符时,需要正确设置csv参数:
import csv
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as file:
# 设置quoting处理特殊字符
writer = csv.writer(file, quoting=csv.QUOTE_MINIMAL)
writer.writerow(["包含,逗号的字段", "正常字段", "另一个字段"])
总结
解决Python csv.writerow乱码问题的关键在于正确设置文件编码:
使用utf-8-sig编码可以完美解决Excel中文乱码问题
同时注意处理换行符(newline='')和特殊字符,确保CSV文件在各种环境下都能正确显示
本文由TianTun于2025-07-15发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://pjw.521pj.cn/20255653.html
发表评论