[英]UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 3: invalid start byte
[英]'utf-8' codec can't decode byte 0x97 in position 14: invalid start byte
單擊按鈕后,我想從服務器下載一個目錄。 該目錄應以zip格式下載。 我正在使用Django和Python。 我之前用相同的代碼嘗試了此操作,但它在Python2 venv上。 Python3 venv上的相同代碼使utf-8編解碼器無法解碼字節錯誤。 該目錄的zip文件已成功創建,但是當我按我網站上的下載按鈕時,它使我拋出了錯誤。
@login_required
def logs_folder_index(request):
user = request.user
if not is_moderator(user):
raise Http404("You are not allowed to see this page.")
else:
if os.path.exists('Experiments.zip'):
os.remove('Experiments.zip')
zipf = zipfile.ZipFile('Experiments.zip','w',zipfile.ZIP_DEFLATED)
path = settings.BASE_DIR + '/experiments/'
zipdir(path,zipf)
zipf.close()
zip_file = open('Experiments.zip','r')
response = HttpResponse(zip_file,
content_type='application/force-download')
response['Content-Disposition'] = 'attachment; filename="{0}"'\
.format(Experiments.zip)
return response
有人可以幫我解決這個問題。
您將文件作為文本流讀取(因為模式為'r'
,而不是'rb'
)。 由於zip通常不會以UTF-8(或一般而言,任何文本編解碼器)進行編碼,因此最終可能會到達無法解碼(或將被毫無意義地解碼)的字節序列,因此您應將其讀為二進制文件:
@login_required
def logs_folder_index(request):
user = request.user
if not is_moderator(user):
raise Http404("You are not allowed to see this page.")
elif os.path.exists('Experiments.zip'):
os.remove('Experiments.zip')
with zipfile.ZipFile('Experiments.zip','w',zipfile.ZIP_DEFLATED) as zipf:
path = settings.BASE_DIR + '/experiments/'
zipdir(path,zipf)
with open('Experiments.zip','rb') as stream:
response = HttpResponse(stream, content_type='application/force-download')
response['Content-Disposition'] = 'attachment; filename="Experiments.zip"'
return response
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.