Python写入CSV遇UnicodeEncodeError,加UTF-8编码后出现乱码
解决CSV写入时的Unicode编码错误与乱码问题
问题回顾
- 初始报错:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to
- 添加
encoding='utf-8'后,CSV文件出现乱码:(Ø§Ù„ÙØ±ÙŠÙ‚ الأول)
原因分析
- 初始错误是因为Windows系统默认编码(如
cp1252)无法处理阿拉伯语这类非ASCII字符,导致编码失败。 - 加
utf-8后仍乱码,是因为Excel默认不识别无BOM的UTF-8文件,会用系统编码解析UTF-8内容,导致字符显示错乱。
解决方案
核心修复:使用带BOM的UTF-8编码写入
将文件编码改为utf-8-sig,它会在文件开头添加UTF-8 BOM标识,让Excel能正确识别UTF-8编码:
# 用原始字符串避免路径转义问题 with open(r'F:\Temp\python\matches-details.csv', 'w', encoding='utf-8-sig') as output_file: dict_writer = csv.DictWriter(output_file, keys) dict_writer.writeheader() dict_writer.writerows(matches_details) print("file created")
额外优化:规范路径写法
原路径中的\T、\p可能被Python解析为转义字符,建议用原始字符串(前缀r)或双反斜杠\\,避免路径解析出错。
验证方式
修改后打开CSV文件:
- 直接用Excel打开,非ASCII字符应正常显示。
- 用文本编辑器(如Notepad++)打开,选择UTF-8编码查看,确认内容无乱码。
内容的提问来源于stack exchange,提问作者Mohamed Elbrawy
相关产品推荐
相关产品推荐

