Python导出CSV遇特殊字符报错:UnicodeEncodeError问题解决
问题:Python抓取数据导出CSV时,遇外文/特殊字符崩溃
报错信息:
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f6f5' in position 91: character maps to "undefined"
当数据包含俄文字母、#、*或Emoji等特殊字符时触发错误,原导出代码如下:
# save it to csv with open('links.csv', 'w', newline='') as csv_out: csv_writer = csv.writer(csv_out) # Create the header rows csv_writer.writerow(['url', 'title','price','location']) for row in data: csv_writer.writerow([str(row['link']),str(row['title']),str(row['price']), str(row['location'])])
修复方法
核心问题是Windows系统下默认文件编码为charmap,无法支持全量Unicode字符,只需在打开文件时指定UTF-8编码即可解决:
- 在
open()函数中添加encoding='utf-8'参数,确保文件以UTF-8格式写入,兼容所有外文、特殊字符和Emoji - 可选添加
errors='replace'参数,遇到极端无法编码的字符时用占位符替代,避免程序中断
修改后的代码:
# save it to csv with open('links.csv', 'w', newline='', encoding='utf-8', errors='replace') as csv_out: csv_writer = csv.writer(csv_out) # Create the header rows csv_writer.writerow(['url', 'title','price','location']) for row in data: csv_writer.writerow([str(row['link']), str(row['title']), str(row['price']), str(row['location'])])
补充说明:UTF-8是通用的Unicode编码格式,几乎支持所有语言字符和特殊符号。如果导出的CSV用Excel打开时外文显示乱码,可以把encoding='utf-8'改成encoding='utf-8-sig',Excel会自动识别编码格式。
内容的提问来源于stack exchange,提问作者user3618585
相关产品推荐
相关产品推荐

