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

Python 2.7读写CSV文件utf-8-sig编码异常问题求助

解决Python 2.7中UTF-8-SIG编码读写CSV的BOM乱码问题

看起来你遇到的是Python 2.7里UTF-8 BOM(字节顺序标记)处理不当导致的乱码问题。先帮你拆解下问题根源,再给你针对性的修复方案:

问题分析

你读取到的表头['\xef\xbb\xbfID;timestamp;CustomerID;Email']里,\xef\xbb\xbf就是UTF-8的BOM标识。Python 2.7的原生open()函数不支持指定编码参数,默认用系统编码(比如Windows下的GBK)读写文件:

  • 读取时如果没指定utf-8-sig,BOM会被当成普通字符保留在字符串里;
  • 写入时如果还是用系统编码,这个BOM字符会被错误解析成乱码(就是你看到的“Ôªø”)。

修复方案

Python 2.7里需要用io或codecs模块的open()函数来处理编码,它们支持指定encoding参数。下面是修改后的函数代码片段:

import io
import csv
import os

def remove_gdpr_info_from_csv(file_path, file_name, temp_folder, original_header):
    # 1. 读取CSV:用utf-8-sig编码自动去除BOM
    with io.open(file_path, 'r', encoding='utf-8-sig') as input_file:
        reader = csv.reader(input_file, delimiter=';')
        # 读取表头(此时已经自动去掉BOM了)
        header = next(reader)
        # 如果你需要基于传入的original_header处理,先清理掉BOM
        cleaned_original_header = original_header[0].replace('\xef\xbb\xbf', '')
    
    # 2. 写入CSV:用utf-8-sig编码自动添加正确的BOM
    output_path = os.path.join(temp_folder, file_name)
    with io.open(output_path, 'w', encoding='utf-8-sig', newline='') as output_file:
        writer = csv.writer(output_file, delimiter=';')
        # 写入清理后的表头(utf-8-sig会自动在文件开头加BOM)
        writer.writerow(cleaned_original_header.split(';'))
        # 后续写入数据行的逻辑...

关键细节说明

  1. 读取时用utf-8-sig:这个编码会自动识别并移除文件开头的BOM,避免表头字符串里混入\xef\xbb\xbf;
  2. 写入时用utf-8-sig:它会自动在文件开头添加标准的UTF-8 BOM,保证文件格式正确,不会出现乱码;
  3. 清理传入的original_header:如果你的original_header已经带BOM,一定要先替换掉再写入,否则会导致文件里出现重复的BOM字符;
  4. newline=''参数:Python 2.7里配合csv模块使用时,加上这个可以避免写入时出现多余的空行。

验证方法

写入完成后,你可以用文本编辑器(比如Notepad++)打开B.csv,查看编码格式是否为“UTF-8-BOM”,表头应该正常显示为ID;timestamp;CustomerID;Email。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:53