当前位置:首页 > Python > 正文

Python CSV写入乱码问题解决方案 - 彻底解决中文编码问题 | Python编程指南

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文件在各种环境下都能正确显示

© 2023 Python编程指南 - 提供实用的Python解决方案

本教程解决了Python使用csv.writerow写入CSV文件时出现乱码的问题,特别针对中文编码问题提供了详细解决方案

发表评论