Django 导出csv文件 中文乱码问题

import csv
import codecs
import datetime
from django.db import connection
from django.contrib.auth.models import User
from django.http import HttpResponse
from models import *

def
output(request, user_id, node_id, function_id): function_id = int(function_id) user_id = int(user_id) node_id= int(node_id) # 指定csv请求回应 response = HttpResponse(content_type='text/csv') user = User.objects.get(id=user_id) functions_has_permission = DataPermission.objects.filter(category=node_id) # 取出sql语句 function_obj = DataPermission.objects.get(id=function_id) function_obj_sql = function_obj.sql # 执行sql语句,并执行。保存执行结果和字段名 cursor = connection.cursor() cursor.execute(function_obj_sql) results = cursor.fetchall() descriptions = cursor.description descriptions_long = len(descriptions) description_list = [None] * descriptions_long i = 0 for description in descriptions: description_list[i] = description[0] i = i + 1 # 将执行结果从元组形式转化为列表形式。 i=0 results_long = len(results) results_list = [None] * results_long for i in range(results_long): results_list[i] = list(results[i]) # print(results_list) # 为文件取名字 now = datetime.datetime.now() now = str(now.isoformat()) name = (now + '.csv').replace(':', '') # 声明一个csv的响应 response['Content-Disposition'] = 'attachment; filename="%s"' % name # csv的响应的编码格式声明 response.write(codecs.BOM_UTF8) writer = csv.writer(response) # 转码问题 a = u'' for result in results_list: i=0 for item in result: if type(item) == type(a): # 如果是unicode类型,那么编码成utf-8 result[i] = item.encode('utf-8') i = i + 1 # with open(response, 'wb') as f: writer.writerow(description_list) for result in results_list: writer.writerow(result) i = i + 1 response.close() return response

以上代码,导出的文件,中文显示成乱码,如图。

 

 

解决方法:将上面代码中的'utf-8' 改成 'gb2312'

result[i] = item.encode('gb2312')

修改之后,导出的csv文件,中文显示正常,如图。

 

 这样改的原理:

.....

 

转载于:https://www.cnblogs.com/haoshine/p/5695760.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值