django中导出utf8编码的csv excel打开乱码的解决方法
使用如下的django view层代码实现导出csv的功能,但是下载下来打开发现在excel中显示的是乱码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def export_csv(request):
user_ids = request.POST.get('user_ids', '')
if not user_ids:
return HttpResponse("<script>alert('无效请求,请选择要导出的记录');window.close();</script>")
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="user_%s.csv"' % (
datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d'))
writer = csv.writer(response)
writer.writerow(['姓名', '年龄', '地址'])
for item in User.objects.filter(
id__in=map(lambda x: int(x), filter(lambda x: x, user_ids.split(",")))):
writer.writerow(
[item.name, item.age, item.address])
return response
后来发现,此问题和python或者django并没有多大关系,即使你用java 用php,如果不做处理导出也是一样会在excel中乱码,问题出在excel判断文件是否是utf8使用的是bom头,
所以我们需要在生成csv的过程中,在文件头部写入bom。
如上面代码第六行后面加上
1 response.write("\ufeff")
即可解决,同理php或者java中也是一样的办法。