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文件,中文显示正常,如图。

这样改的原理:

.....

Django 导出csv文件 中文乱码问题的更多相关文章

  1. golang 导出CSV文件中文乱码的问题

    golang  导出CSV文件中文乱码的问题 解决办法: 在csv文件的开头写入 UTF-8 BOM // 创建文件 dstf, err := os.Create("./data/" ...

  2. Java - 问题集 - 导出csv文件中文乱码

    微软的excel文件需要通过文件头的bom来识别编码,所以写文件时,需要先写入bom头. FileOutputStream fos = new FileOutputStream(new File(&q ...

  3. PHP导出CSV文件出现乱码的解决方法

    在做项目时碰到使用外语的情况下,我们就会使用UTF-8编码.但是,在用PHP导出CSV文件时,如果写入的数据是使用UTF-8编码的日语.韩语之类的外文,就会出现乱码. 要解决PHP生成CSV文件的乱码 ...

  4. Python读取 csv文件中文乱码处理

    需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...

  5. python笔记5-python2写csv文件中文乱码问题

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode. 当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的. 对 ...

  6. python 读取CSV文件 中文乱码

    今天读取一个CSV文件,打印出来,中文显示乱码,原因是编码的缘故,CSV保存是编码格式ANSI,解决办法是以记事本方式打开CSV文件,然后另存为时编码选择UTF-8进行保存即可.

  7. pandas读取csv文件中文乱码问题

    1.为什么会出现乱码问题,用什么方式编码就用什么方式解码,由于csv不是用的utf-8编码,故不能用它解码. 常用的编码方式有 utf-8,ISO-8859-1.GB18030等. 2.中文乱码原因: ...

  8. java utf8字符 导出csv 文件的乱码问题。

    在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private ...

  9. 解决NavicatPremium导入CSV文件中文乱码的问题

    在做数据对接导入的时候对方提供的数据是CSV格式的文件 一开始用Excel打开时发现格式就不对,后来发现只要用Excel打开,就会破坏里面的格式 然后想先用NaviCat导入CSV再转成Excel格式 ...

随机推荐

  1. 第一次尝试用ANT进行build

    虽然是软件工程专业学生,但很多东西都才刚刚接触,有些惭愧,但我相信“Later better than never”,所以我还是鼓励自己不断学习,以后尽量把自己新学会的东西记录下来,以此来督促自己的学 ...

  2. 忘记root密码的解决方法——进入单用户模式修改

    (1)在系统还在读秒的时候按任意键,你会看到如下界面: 然后按下‘e’

  3. no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.codec.JPEGImageEncoderImpl

    no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.imag ...

  4. 进入与退出anconda虚拟环境

    # 进入虚拟环境,使用 # # $ conda activate spider-venv # # 退出虚拟环境,使用 # # $ conda deactivate

  5. bzoj 3064: Tyvj 1518 CPU监控

    Description 1.区间加 \(z\) 2.区间覆盖为 \(z\) 3.查询区间最大值 4.查询区间历史最大值 Solution 线段树维护历史最值,思想大致是维护标记出现过的最大值 考虑这种 ...

  6. 数据结构(二) --- 伸展树(Splay Tree)

    文章图片和代码来自邓俊辉老师课件 概述 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由丹尼尔·斯立特Daniel Sleator ...

  7. c语言printf实现同一位置打印输出

    控制台同一位置打印输出,例如:进度1%->100%在同一位置显示.刚学习c语言的时候一直想做起来,可惜查询好多资料不行.时隔6年多,空闲之余又想起这个问题,便决定一试,虽然c语言已经几乎忘光了, ...

  8. 关于使用flying-saucer-pdf,实现xhtml2pdf

    @author Guoguo 2013.11.24 关于flying-saucer-pdf 是一个XML/CSS渲染器,flying-saucer-pdf工具以XML标准文件作为输入,CSS进行排版. ...

  9. JS判断请求来自Android手机还是iPhone手机

    <script type="text/javascript"> var browser = { versions: function () { var u = navi ...

  10. div,css&table布局有哪些区别

    DIV+CSS布局与TABLE布局相比,有哪些优点? 1.代码少,页面文件小,下载快 Div+css的布局现在属于国际W3C标准,table不是. 都知道用div的布局代码肯定少,所有的样式都在CSS ...