python解决导出excel文件时中文文件名乱码

导出文件名乱码只在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 # 这时候打印的就是正常的了。




你可能感兴趣的:(python解决导出excel文件时中文文件名乱码)