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

 

 這樣改的原理:

.....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM