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
相关产品推荐
相关产品推荐

