导出文件名乱码只在IE内核的浏览器上发生,改也好改,只需把文件名encode一下就可以了,直接上代码:
@login_required
def downloadfile(request):
'''
导出excel文件
'''
filename = u"公司代码"
filename = filename.encode('gb2312')
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=' + filename + '.xlsx'
wbook = Workbook() # 新建一个workbook
ewriter = ExcelWriter(workbook = wbook) # 新建一个excelWriter
wsheet = wbook.worksheets[0] # 取第一个sheet
wsheet.title = u"公司代码"
wsheet.cell('A1').value = '%s' %(u'公司代码')
wsheet.cell('B1').value = '%s' %(u'公司名称')
wsheet.cell('C1').value = '%s' %(u'使用状态')
companycodes = Companycode.objects.order_by('company_code')
inquiry_status = request.GET.get('inquiry_status', None)
query = request.GET.get('query', None)
if inquiry_status == '0' or inquiry_status == '1':
companycodes = companycodes.filter(flag__iexact = inquiry_status)
if query != None and query != '':
companycodes = companycodes.filter(Q(company_name__icontains = query) |
Q(company_code__icontains = query))
row = 2
for companycode in companycodes:
wsheet.cell('A%s' %(row)).value = '%s' %(companycode.company_code)
wsheet.cell('B%s' %(row)).value = '%s' %(companycode.company_name)
wsheet.cell('C%s' %(row)).value = u'在使用' if companycode.flag == 0 else u'已删除'
row = row + 1
ewriter.save(response) # 写文件
return response
另外在python中有这样的情况存在:
filename = u"中国“
print filename # 这行代码会在console里面打印出文件名,但是是乱码的,而通过断点调试查看的结果却是正常的,如果在程序在要用filename的话,直接用就可以了,不用做特殊处理。
如果想在console里面看到正常的情况,可以对filename进行encode一下,如下所示:
filename = filename.encode('gb2312')
print filename # 这时候打印的就是正常的了。