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

Python读写CSV文件指定utf-8编码时重音字符ì乱码问题求助

问题原因分析

你遇到的乱码是典型的UTF-8编码内容被错误用Latin-1(ISO-8859-1)单字节编码解析导致的:字符ì的UTF-8编码为两个字节0xC3 0xAC,如果用Latin-1解码这两个字节,就会分别得到Ã和¬,也就是你看到的ì。
内存中字符显示正常,说明读取阶段的编码配置没问题,问题出在写入环节或者输出文件的解析环节,常见错误场景如下:

  • 写入时encoding='utf-8'参数配置错误,比如把参数写在了csv.writer的入参里,而没有写在open()函数的入参中,导致写入编码实际没有生效
  • 写入前对字符串做了多余的编码转换,比如手动将字符串用UTF-8编码为bytes后又当成字符串写入,造成二次编码
  • 输出文件本身编码正确,但你用来打开文件的工具(最常见为Windows系统下的Excel)默认用非UTF-8编码解析文件,造成显示乱码
解决方法

1. 修正写入代码的编码配置

使用Python标准csv模块写入的正确示例如下,确保encoding参数配置在open()函数中:

import csv

with open('output.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    output_line = [name, address, citizenship_flag]
    writer.writerow(output_line)

如果需要在Windows系统下用Excel直接打开输出文件,可将编码改为utf-8-sig,写入时会自动添加UTF-8 BOM头,帮助Excel识别编码:

with open('output.csv', 'w', encoding='utf-8-sig', newline='') as f:

2. 校验文件实际编码是否正确

不要直接用Excel打开验证编码,用如下代码读取文件校验:

with open('output.csv', 'r', encoding='utf-8') as f:
    content = f.read()
print('sì' in content)

如果返回True说明文件本身编码正常,乱码是打开工具的解析问题。

3. 修正文件打开工具的解码配置

如果确认文件本身编码正确,打开文件时手动指定工具的解码编码为UTF-8即可。比如Excel中可以通过「数据」-「自文本/CSV」路径导入文件,导入时选择编码为UTF-8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:24:03