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

使用unicodecsv模块读取CSV时首行出现\ufeff及解析异常的解决方案

问题根因
  • 输出里的\ufeff是UTF-8 BOM(字节顺序标记),是Windows平台部分编辑器保存UTF-8文件时,自动在文件头部追加的3字节标识位,不属于CSV的有效业务内容。
  • 之前传入encoding='utf8'不生效的原因是:标准utf-8编码规则不会自动识别、剥离开头的BOM,BOM会被解析为普通字符,附着在第一行内容的最前端。
  • 由于BOM占据了第一行的起始位置,CSV解析器无法识别到行首的双引号是字段包裹符,直接按逗号规则拆分第一行,最终出现首行引号残留、字段拆分错误的现象。
修复方案

只需要将编码参数从utf8替换为utf-8-sig即可,该编码是Python内置的、专门适配带BOM的UTF-8文件的编码规则,会自动检测并丢弃文件开头的BOM标记,不会篡改正常业务内容,修改后的代码如下:

import unicodecsv
CSV_PARAMS = dict(
    delimiter=",",
    quotechar='"',
    lineterminator='\n',
    encoding='utf-8-sig'  # 替换为utf-8-sig自动处理BOM
)
unireader = unicodecsv.reader(open('sample.csv', 'rb'), **CSV_PARAMS)
for line in unireader:
    print(line)
运行验证

修改后执行代码,将得到符合预期的解析结果:

['003,word one']
['003,word two']
['003,word three']

注意:不要手动写字符串替换逻辑删除首行的\ufeff,这种硬编码处理方式兼容性差,遇到无BOM的文件、或者BOM出现在非开头位置的异常文件时容易出现误删内容的问题,用utf-8-sig是官方推荐的标准处理方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:09:39