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

Python CSV转字典时键含Unicode特殊字符的问题及解决

解决CSV转字典时首键出现特殊字符(\ufeff/ \u00ef\u00bb\u00bf)的问题

问题原因

你看到的这些特殊字符其实是UTF-8 BOM(字节顺序标记)。它是微软为了让旧版记事本等工具识别UTF-8编码文件而添加的前缀字节序列(0xEF 0xBB 0xBF)。当你用普通的utf-8编码读取文件时,Python不会自动处理这个BOM,所以它会被当成首列标题的一部分被读入,就出现了你看到的奇怪转义字符。

解决方案

你找到的方法完全正确:使用utf-8-sig编码打开文件。这个编码会自动检测并去除UTF-8文件开头的BOM标记,让标题键恢复正常。

修改后的完整代码如下:

import csv

def csv_to_dict(path):
    res = {}
    with open(path, "r", newline='', encoding='utf-8-sig') as csv_file:
        reader = csv.DictReader(csv_file)
        for row in reader:
            for key, value in row.items():
                if key in res:
                    res[key].append(value)
                else:
                    res[key] = [value]
    return res

为什么encoding='utf-8'无效?

标准UTF-8编码并不包含BOM标记,所以Python的utf-8解码器不会处理这个前缀。而utf-8-sig是专门为处理带BOM的UTF-8文件设计的,它会自动跳过开头的BOM字节,确保文件内容被正确解析。

验证效果

用修改后的代码读取你的测试CSV:

Lfd. Nr.,Parameter 1,Parameter 2
1,2,3
1,2,3

会得到你期望的输出:

{'Lfd. Nr.': ['1', '1'], 'Parameter 1': ['2','2'], 'Parameter 2': ['3','3']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:50